"Нет такого файла или каталога", хотя у меня есть файл, и у него есть права на чтение для всех

У меня есть Perl-скрипт на CentOS и я пытаюсь прочитать файл, используя File::Slurp:

my $local_filelist = '~/filelist.log';
use File::Slurp;
my @files = read_file($local_filelist);

Но я получаю следующую ошибку:

Carp::croak('read_file \'~/filelist.log\' - sysopen: No such file or directory') called at /usr/local/share/perl5/File/Slurp.pm line 802

И это несмотря на то, что я запускаю скрипт как myuser и:

(2013-07-26 06:55:16 [myuser@mybox ~]$ ls -l ~/filelist.log
-rw-r--r--. 1 myuser myuser 63629044 Jul 24 22:18 /home/myuser/filelist.log

Это на Perl 5.10.1 x86_64 на CentOS 6.4.

Что может быть причиной этого?

3 ответа

Решение

Просто используйте функцию glob. Вот для чего это.

my $local_filelist = glob '~/filelist.log';

Я не использовал File::Slurp, но рискну предположить, что он не понимает ~ для домашнего каталога. Работает ли это, если вы укажете полный путь - например, используйте:

my $local_filelist = "$ENV{HOME}/filelist.log";

Использование двойных кавычек будет означать, что perl будет расширять $ENV{HOME}.

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

'~/filelist.log'

с:

'/home/myuser/filelist.log'

в вашем сценарии.

Другие вопросы по тегам