$1, $2, $3, ... の値を一度に変数に代入する


Perl では正規表現中に ( ) が含まれていると,( ) で囲まれた部分にマッチした文字列が,左から順に $1, $2, $3, ... という変数に収められる。

パターンマッチを行うと,リストコンテキストでは,($1, $2, $3, ...) というリストを値として返すので,左辺に配列 あるいは変数からなるリストを置けば,( ) 部分にマッチした文字列を一気に変数に代入することができる。(「リスト」「配列」「リストコンテキスト」については Lesson 6Lesson 7 を参照。)

次の例では,$hour, $minute, $second の値はそれぞれ 07, 10, 15となる。

    -----------------------------------------------------------------
    $time = '07:10:15';
    ($hour, $minute, $second) = $time =~ /([0-9]+):([0-9]+):([0-9]+)/;
    -----------------------------------------------------------------

値を代入したい変数が一つでも,リストコンテキストにするため,( ) を付ける必要がある。

    -----------------------------------------------------------------
    $time = '07:10:15';
    ($hour) = $time =~ /([0-9]+):[0-9]+:[0-9]+/;
    -----------------------------------------------------------------