- ベストアンサー
perlの構文間違いについて
以下のような、perlの構文で$infoをmyスコープで宣言しつつ、$datという変数が真なら$infoに$datが入ることを期待しているのですが、まちがっているのでしょうか? my $info = $dat if ($dat); よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
日本語版も。 Perldoc.jp http://perldoc.jp/docs/perl/5.10.0/perlsyn.pod これ読むと、next if $x; のような用途に限定すべきでしょうね。
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
- kuroizell
- ベストアンサー率55% (95/170)
その書き方は変数宣言より先にifが判定されるので if ($dat) { my $info = $dat; } です。偽なら何もしないでおしまいなので、 次のように書きます。 my $info = $dat || undef; # $datが偽の場合undefを代入 my $info = $dat ? $dat : undef; # 三項演算子
お礼
ご回答ありがとうございます。
補足
なるほど、my野スコープが、ifのなかに入ってしまうわけですね。 ありがとうございます。ということは、以下のような場合、1がwarnされるか、2がwarnされるか、保証されないのでしょうか? use strict; my $info = 1 if(0); if($info) { warn "1"; } else { warn "2"; }
- _--_1l1_1_
- ベストアンサー率67% (102/152)
$datが真なら$infoに$datが入りますが、 $datが0だったり空文字だった場合は$infoに何を期待しますか?
お礼
ご回答ありがとうございます。
補足
$datが偽の場合は、$infoにundefガ入ることを期待しています。 my $info=undef; if($dat) { $info = $dat; } と等価だと思っていたのですがどうも違うようです。 正しい解釈をご教授いただければ幸いです。
お礼
ご回答ありがとうございます。
補足
なるほど、理解できました。 ありがとうございました。