初めて自分の家と他人の家が違う、と意識した時

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

my $info = $dat if ($dat);

よろしくお願いします。

A 回答 (4件)

日本語版も。


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

これ読むと、next if $x; のような用途に限定すべきでしょうね。

この回答への補足

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

補足日時:2011/08/26 17:36
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/26 17:33

Perldoc にあった.



参考URL:http://perldoc.perl.org/perlsyn.html#Statement-M …
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/26 17:33

その書き方は変数宣言より先に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";
}

補足日時:2011/08/26 11:22
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/26 11:15

$datが真なら$infoに$datが入りますが、


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

この回答への補足

$datが偽の場合は、$infoにundefガ入ることを期待しています。

my $info=undef;
if($dat) {
$info = $dat;
}

と等価だと思っていたのですがどうも違うようです。
正しい解釈をご教授いただければ幸いです。

補足日時:2011/08/26 09:34
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/26 09:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!