Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

後置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;

いやもうここまでくると完全に意味無いけれど。