第3章 リストと配列 その4 3.8 スカラーコンテキストとリストコンテキスト

本日はコンテキストについて。初めてのPerlから引用する所によると、

ここが、この章で最も大切なセクションです。事実、この本の中で最も重要なセクションといえるでしょう。あなたがPerlを使えるか否かは、まさにこのセクションにかかっているといっても過言ではありません。

ということなので気合い入れていきたいです。

ここの、ポイントを整理すると、

  • コンテキストとは式がどんな場所に置かれているかを示す
  • スカラーコンテキスト(スカラー値が期待される場所)とリストコンテキスト(リスト値を期待される場所)がある
  • 式はコンテキストに応じて値を返す

といったところかしら。そこで、スカラー値が期待されるようなところ=スカラーコンテキストに、通常はリスト値を生成する式があったりすると注意が必要だと。その逆もね。例を考えてみよう。

以下のコードでは、@membersというリスト値を、スカラー値が期待されている代入文(スカラーコンテキスト)で使う。

@members = ('haruhi', 'mikuru', 'yuki');
$calar = @members;

print "$calar\n";

このプログラムはただ、3と表示して終わる。この3は@membersの長さになる。つまりは、スカラーコンテキストでは、リストコンテキストで返されるはずのリスト値の個数が返されてるんだな。ただ、通常はリストを生成する式すべてが、スカラーコンテキストでそのリストの個数を返すわけではないらしい。

p62にあるようなreverseの例を試してみた。

@members = ('haruhi', 'mikuru', 'yuki');
@rray = reverse @members;
$calar = reverse @members;

print "array: @rray\n";
print "scalar: $calar\n";

このプログラムを実行すると、

array: yuki mikuru haruhi
scalar: ikuyurukimihurah

という結果が得られる。@rrayには@membersの要素が逆順に格納されている。$calarには、@membersの各要素を連結した文字列を逆から表示している。@rrayへの代入はリストコンテキストと、$calarへの代入はスカラーコンテキストを式に提供している。ふむふむ。

問題は式がどちらのコンテキストで評価されるかの判断はどうすればよいかだな。この本はどうも「そのうちわかるようになるから」といってるようなんだけど。ようは慣れかしら。

結局の所、Perlでは一つの式のように見えても、文脈=コンテキストによって生成される値が違ったものになるということね。コンテキストに注意して書いたり読んだりすると、いろいろとステキなんだ。

初めてのPerl

初めてのPerl

  • 作者: ランダル・L.シュワルツ,トムフェニックス,Randal L. Schwartz,Tom Phoenix,近藤嘉雪
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2003/05
  • メディア: 単行本
  • 購入: 15人 クリック: 474回
  • この商品を含むブログ (294件) を見る