• ベストアンサー

perlの構文間違いについて

以下のような、perlの構文で$infoをmyスコープで宣言しつつ、$datという変数が真なら$infoに$datが入ることを期待しているのですが、まちがっているのでしょうか? my $info = $dat if ($dat); よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kuroizell
  • ベストアンサー率55% (95/170)
回答No.4

日本語版も。 Perldoc.jp http://perldoc.jp/docs/perl/5.10.0/perlsyn.pod これ読むと、next if $x; のような用途に限定すべきでしょうね。

noname#198459
質問者

お礼

ご回答ありがとうございます。

noname#198459
質問者

補足

なるほど、理解できました。 ありがとうございました。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

Perldoc にあった.

参考URL:
http://perldoc.perl.org/perlsyn.html#Statement-Modifiers
noname#198459
質問者

お礼

ご回答ありがとうございます。

  • kuroizell
  • ベストアンサー率55% (95/170)
回答No.2

その書き方は変数宣言より先にifが判定されるので if ($dat) { my $info = $dat; } です。偽なら何もしないでおしまいなので、 次のように書きます。 my $info = $dat || undef;     # $datが偽の場合undefを代入 my $info = $dat ? $dat : undef; # 三項演算子

noname#198459
質問者

お礼

ご回答ありがとうございます。

noname#198459
質問者

補足

なるほど、my野スコープが、ifのなかに入ってしまうわけですね。 ありがとうございます。ということは、以下のような場合、1がwarnされるか、2がwarnされるか、保証されないのでしょうか? use strict; my $info = 1 if(0); if($info) { warn "1"; } else { warn "2"; }

回答No.1

$datが真なら$infoに$datが入りますが、 $datが0だったり空文字だった場合は$infoに何を期待しますか?

noname#198459
質問者

お礼

ご回答ありがとうございます。

noname#198459
質問者

補足

$datが偽の場合は、$infoにundefガ入ることを期待しています。 my $info=undef; if($dat) { $info = $dat; } と等価だと思っていたのですがどうも違うようです。 正しい解釈をご教授いただければ幸いです。