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

时间:2013-07-26 10:58:39

标签: 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/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上。

导致这种情况的原因是什么?

3 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:3)

只需使用glob功能即可。这就是它的用途。

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

答案 2 :(得分:2)

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

'~/filelist.log'

使用:

'/home/myuser/filelist.log'

在你的剧本中。