OK:Perlがこのメッセージを印刷して終了しないのはなぜですか?
my $login='anybody';
exit if $login ne 'root';
ないでOK:なぜ以下の印刷されない "error
"?
my $login='anybody';
(print "error" && exit) if $login ne 'root';
(条件){行動}について知っています。私はちょうど現在の問題について知りたい。
OK:Perlがこのメッセージを印刷して終了しないのはなぜですか?
my $login='anybody';
exit if $login ne 'root';
ないでOK:なぜ以下の印刷されない "error
"?
my $login='anybody';
(print "error" && exit) if $login ne 'root';
(条件){行動}について知っています。私はちょうど現在の問題について知りたい。
何を書かれていることは言うので:
は、「文字列 『エラー』とコマンド出口の結果の評価を印刷する」
あなたが実際に書くことができます:
を((print "error\n") && exit) if $login ne 'root';
ただし、しないでください。 :)
+1は「しないでください」 –
私は実際にはそれが舌と頬であると思って削除しました。私は戻ってロールバックした: –
あなたは "舌IN頬"を意味します。 – AmbroseChapel
"エラー"が表示されていないと思われますが、正しいですか?これは、式print "error" && exit
がprint ("error" && exit)
と解釈されるためです。代わりにこれを試してみてください:
do { print "error"; exit } if $login ne 'root';
3つの問題があります。
最初に問題となるのは、優先事項の1つです。
print "error" && exit if ...;
は
print("error" && exit) if ...;
可能な修正と同じです:
(print "error") && exit if ...;
print("error") && exit if ...;
print "error" and exit if ...;
第二の問題は、exit
がprint
の結果を条件であるということです、それは適切ではありません。 print
がエラーを返しても終了します。
可能な修正:
(print "error"), exit if ...;
print("error"), exit if ...;
第三の問題は、これがエラーを報告する本当に貧弱な方法であるということです。エラーはSTDERR
に出力され、ゼロ以外の終了コードを使用する必要があります。 die
はここでうまくいくでしょう。
die "error" if ...;
"NOT OK"とはどういう意味ですか?予期せぬことが起こりますか?それは警告/エラーを投げますか? – bobbymcr
実際、ブライアン、Perlでそれがあります。例えば、 'open(stuff)|| bashスクリプティングのように、あらゆる種類のエラーチェックのために "die" error "を返します。 – Dan
@ダン - 私はコメントするために削除し、完全に説明するために答えに移動しました。物事が実行されるかどうかを制御する*論理的な比較ですが、まだOPのコードへの書き方が書かれている "それからやってください"ではありません。 –