ifブロックとif修飾子でのスコープの違い
今更ながら気づいたのでメモ。
まず、ブレースで処理文を囲んだ普通のif分岐。
my $flag = 1; if ( $flag ) { my $lexical_str = "hoge"; } print $lexical_str."\n";
上記のコードはuse strictで以下のようなエラーになります。
Global symbol "$lexical_str" requires explicit package name at ./test.pl line 11.
しかし、if修飾子を使った場合は$lexical_strは$flagと同じスコープとなり、正常に"foo"が標準出力されます。
my $flag = 1; my $lexical_str = "foo" if $flag; print $lexical_str."\n";
これはunlessでも同様のようです。