$ perl -pe 1 foo && echo ok
Can't open foo: No such file or directory.
ok
Perl betiğinin dosya olmadığında başarısız olmasını gerçekten istiyorum. Girdi dosyası yoksa -p veya -n yapmanın "uygun" yolu nedir?
$ perl -pe 1 foo && echo ok
Can't open foo: No such file or directory.
ok
Perl betiğinin dosya olmadığında başarısız olmasını gerçekten istiyorum. Girdi dosyası yoksa -p veya -n yapmanın "uygun" yolu nedir?
Yanıtlar:
-P anahtarı bu döngüde kodunuzu (argüman şu -e) sarmak için sadece bir kısayoldur:
LINE:
while (<>) {
... # your program goes here
} continue {
print or die "-p destination: $!\n";
}
(-n aynı ancak devam bloğu olmadan.)
<>Boş operatör eşdeğerdir readline *ARGV, ve bu okunan bir dosya olarak art arda her bir bağımsız değişken açar. Örtülü açıkın hata işlemesini etkilemenin bir yolu yoktur, ancak ölümcül yaydığı uyarıyı ölümcül yapabilirsiniz (not, bu -i anahtarıyla ilgili birkaç uyarıyı da etkileyecektir):
perl -Mwarnings=FATAL,inplace -pe 1 foo && echo ok
inplacekategori; onsuz, istemediğimiz -Mwarnings=FATALanlamına gelir FATAL => all. anladım.
Döngünün gövdesine bir bayrak yerleştirin, bağlantının sonundaki END bloğundaki bayrağı kontrol edin.
perl -pe '$found = 1; ... ;END {die "No file found" unless $found}' -- file1 file2
Yalnızca hiçbir dosya işlenmediğinde başarısız olduğunu unutmayın.
Tüm dosyalar bulunamadığında sorunu bildirmek için aşağıdaki gibi bir şey kullanabilirsiniz:
perl -pe 'BEGIN{ $files = @ARGV} $found++ if eof; ... ;END {die "Some files not found" unless $files == $found}'
BEGIN{die "File not found" unless -f $ARGV[0]}. (Daha hafif diyorum, çünkü bayrak ayarlamayı ve 2 parça kod eklemeyi içermiyor)