لماذا لا يموت أنبوب بيرل إلى Zcat إذا لم يكن الملف موجودًا؟
سؤال
إذا لم يكن ملف 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 $!;
في مثالك الثاني ، ملف فتحه بيرل غير موجود ، لذلك سوف تموت.
في المثال الأول ، ال أمر يسمى بيرل ينفذ (مع أي نتيجة) ، لذلك لا يوجد سبب للموت.
لا تنتمي إلى StackOverflow