スカラーコンテキストとリストコンテキスト
Perlが式を解析する際、スカラー値かリスト値のどちらかを期待する。その期待するものが、その式のコンテキスト。同じ式であっても、状況に応じて、返される結果が異なる。
#!/usr/bin/perl; @list = qw/ a b c /; ($a) = @list; # リストコンテキスト $b = @list; # スカラーコンテキスト print "$a\n"; print "$b\n";
a 3
配列はリストコンテキストでは、その要素を返すが、スカラーコンテキストでは、その要素数を返す。
リストを生成する式をスカラーコンテキストで使う。
#!/usr/bin/perl -w $str = reverse qw/ tale oil cost /; print "$str\n";
tsoclioelat
reverse演算子をスカラーコンテキストで使うと、全ての要素を連結した文字列を、逆順にしたものを返す。sort演算子は、スカラーコンテキストでは常にundefを返す。単純に配列の要素数を返すわけではないらしい。
スカラーコンテキストを強制する
リストコンテキストを強制的にスカラーコンテキストに
変えるには、擬似関数scalarを使う。
#!/usr/bin/perl -w @list = qw/ Tom Jack Fred /; print "I have " , @list, " brothers.\n"; print "I have ", scalar @list, " brothers.\n";
I have TomJackFred brothers. I have 3 brothers.
print演算子はリストコンテキストを提供するので、配列があると、その要素を順番に表示する。だからこの場合は、scalarを使って、強制的に要素数を返すようにしている。