私のプログラムではfile names、コマンドラインからプログラムにリストを渡し、各ファイルが- executable、readableおよび.であるかどうかを確認していますwritable。
上記の問題に対してステートメントを使用しています。しかし、ステートメントforeach-whenの使用に問題があるようです。正しく使用していない可能性がありますが、予期しない結果が発生します。whendefault
これが私のコードです:-
#!/perl/bin
use v5.14;
use warnings;
foreach (@ARGV) {
say "*************Checking file $_ *******************";
when (-r $_) { say "File is Readable"; continue; }
when (-w $_) { say "File is Writable"; continue; } # This condition is true
when (-x $_) { say "File is Executable" } # This condition is false
default { say "None of them" } # Executed
}
ファイルの名前に関係なく、すべての条件をperlでチェックするためcontinueに、最初の2つにのみを追加しました。when
continueまた、最後から2番目にを追加していません。これは、が実行されていない場合whenにのみ実行されるようにするためです。defaultwhen
ここでの問題は、最後のwhen条件がfalseの場合、ブロックに入らず、最初の2つのステートメントが満たされていても実行を続けることです。defaultwhen
の順序を変えてこの問題の原因を確認したwhenところ、最後だけwhenを実行すると、がないことがわかりcontinue、defaultステートメントが実行されないことがわかりました。
したがって、上記のコードでは、スワップ-xして-r..ファイルが読み取り可能であるためwhen、この場合は最後に実行されます..その後、defaultステートメントは実行されません。
#!/perl/bin
use v5.14;
use warnings;
foreach (@ARGV) {
say "*************Checking file $_ *******************";
when (-x $_) { say "File is Executable"; continue; }
when (-w $_) { say "File is Writable"; continue; }
when (-r $_) { say "File is Readable" } # This condition is true
default { say "None of them" } # Not executed
}
ですから、このような状況にどう対処するかをお聞きしたいと思います。Perlにgiven-whenステートメントが追加されたのと同じように機能させたいのです。
すべてをチェックし、少なくとも1つが実行されwhenた場合はスキップする必要があります。defaultwhen