$ perl -pe 1 foo && echo ok
Can't open foo: No such file or directory.
ok
मैं वास्तव में पर्ल स्क्रिप्ट को पसंद करूँगा जब फ़ाइल मौजूद नहीं होगी। जब इनपुट फ़ाइल मौजूद नहीं है, तो -p या -n बनाने का "उचित" तरीका क्या है?
$ perl -pe 1 foo && echo ok
Can't open foo: No such file or directory.
ok
मैं वास्तव में पर्ल स्क्रिप्ट को पसंद करूँगा जब फ़ाइल मौजूद नहीं होगी। जब इनपुट फ़ाइल मौजूद नहीं है, तो -p या -n बनाने का "उचित" तरीका क्या है?
जवाबों:
-P स्विच सिर्फ इस पाश में अपने कोड (तर्क निम्नलिखित -e) लपेटने के लिए एक शॉर्टकट है:
LINE:
while (<>) {
... # your program goes here
} continue {
print or die "-p destination: $!\n";
}
(एन एक ही है, लेकिन जारी ब्लॉक के बिना।)
<>
खाली ऑपरेटर के बराबर है readline *ARGV
, और कहा कि से पढ़ने के लिए एक फ़ाइल के रूप में लगातार प्रत्येक तर्क को खोलता है। उस निहित खुले की त्रुटि से निपटने को प्रभावित करने का कोई तरीका नहीं है, लेकिन आप चेतावनी को घातक बना सकते हैं (नोट, यह -i स्विच से संबंधित कई चेतावनियों को भी प्रभावित करेगा):
perl -Mwarnings=FATAL,inplace -pe 1 foo && echo ok
inplace
श्रेणी है; इसके बिना, -Mwarnings=FATAL
साधन FATAL => all
, जो हम नहीं चाहते हैं। समझ गया।
लूप के शरीर में एक ध्वज सेट करें, फ़ाइनलाइनर के अंत में END ब्लॉक में ध्वज की जांच करें।
perl -pe '$found = 1; ... ;END {die "No file found" unless $found}' -- file1 file2
ध्यान दें कि यह तभी विफल होता है जब कोई फ़ाइल संसाधित नहीं हुई थी।
समस्या की रिपोर्ट करने के लिए जब सभी फाइलें नहीं मिली हैं, तो आप कुछ का उपयोग कर सकते हैं
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]}
। (मैं कहता हूं लाइटर, क्योंकि इसमें एक ध्वज स्थापित करना और कोड के 2 टुकड़े जोड़ना शामिल नहीं है)