WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:Perl条件演算子の使い方について

0:[投稿] perl_syo [2003/04/24 11:24 ][環境:IE6 perl]

こんにちは。
if ($ENV{'REQUEST_METHOD'} ne "POST") {
    &error('エラー','標準入力POSTで送信してください。1');
}
という一文を書き換えようとしています。

$ENV{'REQUEST_METHOD'} ne "POST" ? &error('エラー','標準入力POSTで送信してください。1'):last;

これでも動作するようなのですが、同じ処理として、書き方に問題はないでしょうか。
Perlに詳しい方、ご一報お願いします。


1:[回答] つう [2003/04/25 01:35 ]

個人的な意見ですが、?を使うのは原則として、条件が成り立つ時と成り立たない時で代入する値が変わる場合に限定した方が良いのではないかと思います。

こんな感じ。
if ($ret eq '1') {
 $caption = '正解';
} else {
 $caption = '不正解';
}
の代わりに
$caption = ($ret eq '1') ? '正解' : '不正解';
と書く。
(文字列に限らず関数を呼んだりするのもありだと思う)


2:[関連] dailang [2003/04/25 09:15 ]

問題ないと思いますよ。
良くも悪くも、そういうわけわからんところがPerlらしいとも言える…
例えば、http://www.perldoc.com/perl5.8.0/pod/perlsyn.htmlでは、
次の4つの書き方は同じことだ、として紹介しています。
この場合、最後の書き方が今回の件に該当しますよね。
(perldocでもさすがに「ちょっと風変わり」だとは言っていますけど。^^;)

>    if (!open(FOO)) { die "Can't open $FOO: $!"; }
>    die "Can't open $FOO: $!" unless open(FOO);
>    open(FOO) or die "Can't open $FOO: $!";    # FOO or bust!
>    open(FOO) ? 'hi mom' : die "Can't open $FOO: $!";
>                        # a bit exotic, that last one


3:[質問] perl_syo [2003/04/25 13:01 ]

そうですね。'hi mom'のところが無処理としたいわけです。
ちなみに
last;
のとこを
undef;
ってだめでしょうか。


4:[関連] dailang [2003/04/25 14:58 ]

なるほど undef ですか。ひとつ勉強できました。^^
(私自身「回答」なんてできるスキルまだ持っていませんので…)
'hi mom' つまり単なる文字列でOKなんですから、undefでも構わない道理ですよね。
実際、エラーもなく動作しましたよ。

ただ、else に相当する部分が初めから要らないのでしたら、
(条件) && 命令;
(条件) and 命令;
も選択肢に入れてみてはいかがでしょ?


5:[完了] perl_syo [2003/04/25 19:29 ]

ありがとうございます。
とりあえず完了とさせていただきます。
異論のある方はまた是非よろしくお願いします。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World