こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

perlの構文間違いについて

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

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

よろしくお願いします。

投稿日時 - 2011-08-26 01:37:57

QNo.6967981

すぐに回答ほしいです

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

日本語版も。
Perldoc.jp
http://perldoc.jp/docs/perl/5.10.0/perlsyn.pod

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

投稿日時 - 2011-08-26 17:22:24

補足

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

投稿日時 - 2011-08-26 17:36:29

お礼

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

投稿日時 - 2011-08-26 17:33:45

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

Perldoc にあった.

参考URL:http://perldoc.perl.org/perlsyn.html#Statement-Modifiers

投稿日時 - 2011-08-26 12:05:52

お礼

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

投稿日時 - 2011-08-26 17:33:56

ANo.2

その書き方は変数宣言より先にifが判定されるので
if ($dat) {
my $info = $dat;
}
です。偽なら何もしないでおしまいなので、
次のように書きます。

my $info = $dat || undef;     # $datが偽の場合undefを代入
my $info = $dat ? $dat : undef; # 三項演算子

投稿日時 - 2011-08-26 10:51:07

補足

なるほど、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:54

お礼

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

投稿日時 - 2011-08-26 11:15:44

ANo.1

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

投稿日時 - 2011-08-26 02:59:48

補足

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

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

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

投稿日時 - 2011-08-26 09:34:47

お礼

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

投稿日時 - 2011-08-26 09:35:05

あなたにオススメの質問