perl:canot在循环中打开文件

时间:2015-05-19 16:02:15

标签: perl io

我正在尝试阅读一堆类似的文件并逐个处理它们。这是我的代码。但不知何故,perl脚本没有正确读取文件。我不确定如何解决它。这些文件绝对是我可读写的。

cannot open /full_dir_to_file/a.txt

当我运行它时,出现错误信息(如下所示):

{{1}}

2 个答案:

答案 0 :(得分:6)

每个文件名末尾都有换行符:

my @olap_f = `ls ~dir_to_file/*txt`;
chomp @olap_f; # Remove newlines

更好的是,使用glob来避免启动新流程(并且必须修剪换行符):

my @olap_f = glob "~dir_to_file/*txt";

另外,使用$!找出文件无法打开的原因:

open(IN,'<',$file) || die "cannot open $file: $!";

这会告诉你

cannot open /full_dir_to_file/a.txt
: No such file or directory

可能会让您识别出不需要的换行符。

答案 1 :(得分:1)

我会在这里为IO::All添加一个快速插件。了解引擎盖下发生的事情非常重要,但有时可以方便地做到:

use IO::All;
my @olap_f = io->dir('/full_dir_to_file/')->glob('*txt');

在这种情况下,它不短于@ cjm使用glob,但IO::All确实有一些其他方便的方法来处理文件。