KAIHATSUGIKEN GROUP
************************************************************************************
20 スカラーコンテキストとリストコンテキスト
********************************************+++
コンテキストとは文脈と言う意味があります。
perlには2つのコンテキストがあります。
1つの値を計算しようとしているスカラーコンテキストと
複数の値を計算しようとしているリストコンテキストです。
簡単に言うと
$x=右辺 は一つの値を計算しようとしているのでスカラーコンテキスト
@a=右辺 配列変数に代入しようとする場合は右辺はリストコンテキストになります。
括弧とカンマで作るリストの中もリストコンテキストです。
組み込み関数によっては、引き数がリストコンテキストになる場合があります。
よく使う関数の中ではprintの引き数がリストコンテキストです。
<> <stdin> は1行入力する演算子だと説明しました。
実は1行入力するのはスカラーコンテキストの場合です。
<>や <stdin>をリストコンテキストで使うと、入力を全部読み込んでその各行を要素にした
配列を返します。
@all<>
と書くと全入力が行の配列として@allに代入されます。
$str="1:23:45";
($hour,$min,$sec)=($str=~/(\d+):(\d+):(\d+)/);
を実行すると$hourに 1, $minに23 $secに45が代入されます。
gオプションをつけた場合には繰り返しパターンマッチをして、全てのマッチ($matchの値)
の配列を返します。例えば
$str="perl tcl java";
@allmatch=($str=~/(\w+)/g);
を実行すると @allmatchには "perl" "tcl" "java" の3つの要素の配列が代入されます。
むずかしー!!!
*************************************