Perl не идентифицирует папку - PullRequest
0 голосов
/ 02 июля 2019

Perl не обнаруживает существующую папку, папка уже существует, но все еще не обнаруживает вообще.

Ниже приведен простой код

my $dir = '/net/prihpwnfs02';
if (-e $dir and -d $dir) {print "GOOD :)\n";} else {print "BAD :(\n";}

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Вы не проверяете, какую ошибку получили.

my $dir_qfn = '/net/prihpwnfs02';
defined( my $is_dir = -d $dir_qfn )
   or die("Can't stat \"$dir_qfn\": $!\n");

print $is_dir ? "GOOD :)\n" : "BAD :(\n";

или

my $dir_qfn = '/net/prihpwnfs02';
stat($dir_qfn)
   or die("Can't stat \"$dir_qfn\": $!\n");

print -d _ ? "GOOD :)\n" : "BAD :(\n";

Если вы не хотите умереть, если ее не существует,

my $dir_qfn = '/net/prihpwnfs02';
stat($dir_qfn)
   or $!{ENOENT} or die("Can't stat \"$dir_qfn\": $!\n");

print -d _ ? "GOOD :)\n" : "BAD :(\n";

Сообщение " Значение слишком большое для определенного типа данных " связано с ошибкой EOVERFLOW.Страница man stat (2) определяет, когда возвращается эта ошибка.В моей системе это говорит следующее:

[Аргумент] относится к файлу, размер, номер индекса или количество блоков которого не могут быть представлены соответственно в типах off_t, ino_t или blkcnt_t.Эта ошибка может возникать, например, когда приложение, скомпилированное на 32-разрядной платформе, без -D_FILE_OFFSET_BITS=64 вызывает stat() для файла, размер которого превышает (1<<31)-1 байт.

Короче говоря,тот факт, что вы используете безумно устаревшую сборку Perl, настиг вас.

0 голосов
/ 02 июля 2019

Я не знаю, что вы пытаетесь сделать, поскольку вы не задали фактический вопрос, но если вы пытаетесь проверить, существует ли папка или нет, вы можете использовать следующий код:

#!/usr/bin/perl -w
use strict;

my $dir = '/net/prihpwnfs02'; 

if (-d $dir) {
    print "$dir exists";
} else {
    print "$dir does not exist";
}

Дайте мне знать, помогло ли это!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...