لا يمكنك فتح الدليل ، أو ما هو الخطأ في رمز (Perl) الخاص بي؟
سؤال
لدي اسم ملف logspath.txt
التي تحتوي على مسار دليل السجلات على الجهاز. دليل واحد كل سطر. على الرغم من وجود الدليل ، يقول بيرل إنه لا.
#!/usr/bin/perl -w
open FILE,"logspath.txt" or die $!;
while (<FILE>){
print $_;
opendir ($DIR,chomp($_)) or die $!;
عندما أقوم بتشغيل البرنامج النصي أحصل عليه:
/home/amosa/
No such file or directory at archive.pl line 6, <FILE> line 1.
إدراج الدليل:
~$ ls -l /home/amosa/
total 6
drwxr-xr-x 11 amosa prodapp 1024 Mar 2 12:49 deploy
drwxr-xr-x 2 amosa prodapp 512 Mar 2 12:39 lib
-rw-r--r-- 1 amosa prodapp 787 Mar 2 11:02 s
اي نصيحه؟
المحلول
chomp
لا يوجد لديه قيمة إرجاع ذات معنى يمكنك بعد ذلك نقلها opendir
. تحتاج إلى chomp
سلسلتك في بيان منفصل ، فوق opendir
.
chomp;
opendir DIR, $_ or die ...
نصائح أخرى
يجب أن يكون هذا تعليقًا ولكن نشر رمز في التعليقات لا يعمل حقًا ، لذا فأنا أجعله CW.
إليك كيفية كتابة هذا "أفضل" لبعض القيمة الأفضل:
#!/usr/bin/perl
use strict; use warnings;
my $logs_file = 'logspath.txt';
open my $FILE, '<', $logs_file
or die "Cannot open '$logs_file': $!";
while ( my $dir = <$FILE> ) {
print $dir and chomp $dir;
opendir my $dir_h, $dir
or die "Cannot open directory '$dir': $!";
# do something with $dir_h
}
باختصار ، استخدم مقابض الملفات المعجمية ومقابض الدليل ، استخدم شكل الوسيطة الثلاثة من افتح وتضمين اسم الملف أو الدليل الذي كنت تحاول فتحه في رسالة الخطأ المرفقة في علامات الاقتباس أو الأقواس لمعرفة ما تم تمريره بالفعل إلى افتح أو Opendir يتصل.
استخدام صارم استخدم التحذيرات.
open my $FILE, '<logspath.txt'
or die "Cannot open '$logs_file': $!";
while ( my $dir = <$FILE> ) {
print $dir and chomp $dir;
if( -d $dir)
{
opendir my $dir_h, $dir
or die "Cannot open directory '$dir': $!";
# do something with $dir_h
}
else
{
print " Can't open directory $!\n";
}
}
هنا "-D" يستخدم للتحقق من أن الدليل متاح أم لا. إذا تحققنا من الدليل فهو مفيد للغاية.