لا يمكنك فتح الدليل ، أو ما هو الخطأ في رمز (Perl) الخاص بي؟

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

  •  24-09-2019
  •  | 
  •  

سؤال

لدي اسم ملف 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" يستخدم للتحقق من أن الدليل متاح أم لا. إذا تحققنا من الدليل فهو مفيد للغاية.

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