構文は何ですか
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を返します。コードブロックと同様に、スコープを定義する以外は何もしません