読者です 読者をやめる 読者になる 読者になる

初代Masteries

きっとモヒカンにもなれないお前たちに告げる!!!

my+後置ifについてまとめた

※ほぼ自分用メモ的な内容です.

要するに...

こういうやつです.

my $hoge = 'fuga' if $foo == $bar;

結論を言うと...

このような構文でのmy文の振る舞いは未定義なので, my+後置ifなどは使ってはいけません!!!


twitterで@さんが教えてくださいました. ありがとうございます!

上記の通り, 詳細はperldocに書いてあって, 引用するとこんな感じです.

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

...という訳で, myの後に後置ifとか後置unlessとかは絶対に置かないようにしましょう!

終わり?

です!

まあ, そもそもmyの後に後置ifとか書いたら「...アレ, どういう意図で書いてんだ? これ?」と思われること間違いないので, こんなコードは書かないと思います.
ただ, 「いや, これでうまく動いてるんで!」とか言われた時にちゃんと反論というか, 説明できるようにまとめておこうと思った次第でございます.