لماذا لا يموت أنبوب بيرل إلى Zcat إذا لم يكن الملف موجودًا؟

StackOverflow https://stackoverflow.com/questions/4014425

  •  26-09-2019
  •  | 
  •  

سؤال

إذا لم يكن ملف GZ الخاص بي غير موجود ، فلماذا لا يموت؟

$ cat test.pl    
open(FILE, "zcat dummy.gz |") or die "DIE";

$ ./test.pl    
zcat: dummy.gz: No such file or directory

إذا قرأت ملفًا بشكل طبيعي ، فهو يعمل كما هو متوقع:

$ cat test2.pl    
open(FILE, "dummy.gz") or die "DIE";

$ ./test2.pl    
DIE at ./test.pl line 2.
هل كانت مفيدة؟

المحلول

لك open ينجح (كما هو نجح في تشغيل ZCAT) ، لن تحصل zcatرمز الخروج حتى تغلق واصف الملف.

قد ترغب في التحقق مما إذا كان الملف موجودًا وقابل للقراءة قبل البدء ، على سبيل المثال.

die "unable to read file" unless (-f "dummy.gz" and -r "dummy.gz")

نصائح أخرى

قد ترغب في التفكير في استخدام PerlIO::gzip, ، على سبيل المثال.

use PerlIO::gzip;
open(FILE, '<:gzip', 'dummy.gz') or die $!;

في مثالك الثاني ، ملف فتحه بيرل غير موجود ، لذلك سوف تموت.

في المثال الأول ، ال أمر يسمى بيرل ينفذ (مع أي نتيجة) ، لذلك لا يوجد سبب للموت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top