$ 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 সুইচটি কেবল একটি শর্টকাট:
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 টি টুকরো কোড যুক্ত করা জড়িত না)