Perlについての質問箱 24箱目
■ このスレッドは過去ログ倉庫に格納されています
0235デフォルトの名無しさん
2006/05/10(水) 10:23:32優先順位の問題。
print は引数にリストを取るので、連続したリストに見える後続の全てを引数として飲み込む。ひとつの文中で、print のようなリスト演算子モドキの後に何か別の処理を書く時にはこの動作に注意しなくてはいけない。
引数をそれぞれ () で括るのが最も万能の対策。() を使わずに何か後続させようとする場合は、より優先順位の低い not、and、or、xor のいずれか、あるいは制御構造修飾子を使うべし。
最初の && を用いた文は次のようにパースされる。
print( "hello, " && print( "goodbye.") );
perl はまず && の左辺 "hello, " を評価する。リテラル "hello, " は Perl の有効な真値であるため、次に右辺の print() が評価される。
print は出力に成功すると真値 '1' を返すのでこれも真と評価される。よって && の両辺が真となり、最後に評価された値である '1' が、最初の print の引数として渡され、それが出力される。
てな感じ。
■ このスレッドは過去ログ倉庫に格納されています