後置ifと変数スコープ
メモ。
しかしすぐに先駆者を見つける。
後置ループにもスコープがある? - Practice of Programming疑問:mod_perl と 後置 if と my - makogの日記
ありがとうございます。
use strict; use warnings; use 5.012; my $flag = 0; my $err = 1 if $flag; # ←★ここ!! say $err;
Use of uninitialized value $err in say at - line 9.
これが警告で怒られるだけなんだよな。
意味的にはこんな感じだと思っていた。
my $err = 1 if $flag; say $err;
↑これが、
if ($flag) { my $err = 1; say $err; } else { say $err; }
↑こう。
見えないブロックに囲まれていると思っていたが、見た目どおり後置ifならブロックなんてなかった。
むしろ三項演算に近い。
my $err = $flag ? 1 : undef;
つまり if が true だろうが false だろうが、$errという変数はちゃんとできていたんだよ!!!
な、なん(ry
後置ifでブロックをつけるなら、doブロック。
do { my $err = 1 } if $flag;
いやもうここまでくると完全に意味無いけれど。