Perl ';没有这样的文件或目录';即使我拥有这个文件,并且它对每个人都有读取权限

Perl ';没有这样的文件或目录';即使我拥有这个文件,并且它对每个人都有读取权限,perl,file,permissions,centos,slurp,Perl,File,Permissions,Centos,Slurp,我在CentOS上有一个perl脚本,正在尝试使用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/lo

我在CentOS上有一个perl脚本,正在尝试使用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
这是在CentOS 6.4上的perl 5.10.1 x86_64上实现的


什么原因可能导致此问题?

我认为,当您运行脚本时~可能未设置或设置为其他位置-请尝试替换:

'~/filelist.log'
与:


在您的脚本中。

我认为当您运行脚本时~可能未设置或设置为其他位置-请尝试替换:

'~/filelist.log'
与:


在您的脚本中。

我没有使用File::Slurp,但我冒昧地猜测它不理解主目录的
~
。如果指定完整路径,是否有效-例如,使用:

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

使用双引号将意味着perl将扩展$ENV{HOME}。

我没有使用File::Slurp,但我猜它不理解主目录的
~
。如果指定完整路径,是否有效-例如,使用:

my $local_filelist = "$ENV{HOME}/filelist.log";
使用双引号意味着perl将扩展$ENV{HOME}。

只需使用函数即可。这就是为什么

my $local_filelist = glob '~/filelist.log';
只要使用这个函数。这就是为什么

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