条件構造で修飾されたmy文の振る舞い

以下のようなコードがどう振舞うのか良く分からなかった:

my $val = 1 if $flag == 1;

普通に考えるとif部分は「my $val = 1」全体にかかるはずなので、$flagが1でない場合は$valの宣言自体がなされないはず。
ということは宣言が実行時まで有効かどうか分からないということになるが、宣言はコンパイル時に判定されるべきな気がするので
なんか違和感がある。

というわけで調べてみた。

以下のperlのコードが動かない理由を教えて下さい。

このページのNo.4のりゅうさんの回答が参考になった。

http://perldoc.jp/docs/perl/5.10.0/perlsyn.pod :

注意: (my $x if ... のような) 条件構造やループ構造で修飾された my 文の振る舞いは 未定義 です。 my 変数の値は undef かも知れませんし、以前に代入された値かも 知れませんし、その他の如何なる値の可能性もあります。 この値に依存してはいけません。 perl の将来のバージョンでは現在のバージョンとは何か違うかも知れません。 ここには厄介なものがいます。

というわけで振る舞いは未定義であることが分かった。この書き方は使わないようにしよう。