構文は何ですか
if (1) {}
行う?
この構文のドキュメントが見つからず、1 はブール値として扱われません。私は正しいですか?
技術的には、if (1)
これは常に実行される if ステートメントであるため、興味深いことは何もありません。
の一般的な使用方法の 1 つif (1)
は、たとえばデバッグ目的で、すばやく無効にしたいコードをラップすることです。を にすばやく変更しif (1)
てif (0)
、コードを無効にすることができます。
はい、1 は true として扱われるため、次のブロックif (1)
は常に実行されます。
perldocから
数値 0、文字列 '0' と "" 、空のリスト () 、および undef はすべて、ブール コンテキストでは false です。他のすべての値は true です。
1
この場合、 は実際にブール値として扱われ、常に に評価されtrue
ます。
これは基本的に常にif
通過するステートメントです(そもそも不要です)。
コードブロックを実行します。それは以下と同等です:
{
...
}
池上さん追加:
いいえ、ちがいます。
{ ... }
は「ベア ループ」であり、1 回だけ実行されるループです。next
、last
およびの影響を受けredo
ます。
if (1) { ... }
ループではありません。next
、last
およびの影響を受けませんredo
。
>perl -E"for (1..3) { say $_; if (1) { next; } say $_; }"
1
2
3
>perl -E"for (1..3) { say $_; { next; } say $_; }"
1
1
2
2
3
3
ただし、どちらもレキシカルスコープを作成するという点で似ています。
1 がfalse に評価されないという事実により、1はブール値の true として扱われているようです。Perl でブール変数を使用するにはどうすればよいですか? をif
参照してください。
ではperl
、次の値が考慮されますfalse
0
Empty String
他のすべてが考慮されますtrue
そのため、if (1)
常にtrue
if(1)
確かに毎回trueを返します。コードブロックと同様に、スコープを定義する以外は何もしません