যখন ইনপুট ফাইলটি পাওয়া যায় না তখন পার্ল স্ক্রিপ্ট (-n / -p দিয়ে চালানো) ব্যর্থ হওয়া কতটা ভাল (আইডোমেটিক্যালি)?


11
$ perl -pe 1 foo && echo ok
Can't open foo: No such file or directory.
ok

ফাইলটি উপস্থিত না থাকলে আমি পার্ল স্ক্রিপ্টটি ব্যর্থ হয়ে যেতে চাই। ইনপুট ফাইলটি উপস্থিত না থাকলে -p বা -n ব্যর্থ করার "সঠিক" উপায় কী?

উত্তর:


6

এই লুপটিতে আপনার কোড (নিম্নলিখিত যুক্তিটি অনুসরণ করে) মোড়ানোর জন্য -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

@ মার্করেইড ইনপ্লেস হ'ল আমাদের আগ্রহী সতর্কতা বিভাগ are অন্যান্য সতর্কতাগুলিকে প্রভাবিত করার কোনও কারণ নেই।
গ্রিন্জ

সতর্কতা থেকে :The presence of the word "FATAL" in the category list will escalate warnings in those categories into fatal errors in that lexical scope.
গ্রিন্জ

ঠিক, inplaceবিভাগটি; এটি ছাড়া, -Mwarnings=FATALমানে FATAL => all, যা আমরা চাই না। বুঝেছি.
মার্ক রিড

4

লুপের শরীরে একটি পতাকা সেট করুন, অনেলাইনারের শেষে 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}'

1
আপনার স্ক্রিপ্টটি ফাইল নিতে অনুমিত হয় যেন বদলে আর্গুমেন্ট stdin থেকে পড়া, এই সমাধান একটি লাইটার বিকল্প হবে BEGIN{die "File not found" unless -f $ARGV[0]}। (আমি হালকা বলি, কারণ এটিতে একটি পতাকা স্থাপন এবং 2 টি টুকরো কোড যুক্ত করা জড়িত না)
দাদা

ধরে নিও যে সমস্ত ফাইলগুলি শূন্য-দৈর্ঘ্যের নয়।
টঙ্কটালাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.