1

我在 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 上。

这可能是什么原因造成的?

4

3 回答 3

5

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

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

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

于 2013-07-26T11:04:18.387 回答
3

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

my $local_filelist = glob '~/filelist.log';
于 2013-07-26T11:15:39.360 回答
2

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

'~/filelist.log'

和:

'/home/myuser/filelist.log'

在你的脚本中。

于 2013-07-26T11:03:32.160 回答