私のプログラムではfile names
、コマンドラインからプログラムにリストを渡し、各ファイルが- executable
、readable
および.であるかどうかを確認していますwritable
。
上記の問題に対してステートメントを使用しています。しかし、ステートメントforeach-when
の使用に問題があるようです。正しく使用していない可能性がありますが、予期しない結果が発生します。when
default
これが私のコードです:-
#!/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
にのみ実行されるようにするためです。default
when
ここでの問題は、最後のwhen
条件がfalseの場合、ブロックに入らず、最初の2つのステートメントが満たされていても実行を続けることです。default
when
の順序を変えてこの問題の原因を確認した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
た場合はスキップする必要があります。default
when