为什么Perl抱怨“包含换行符的文件名不成功”?

我得到一个我不明白的错误。 我正在使用File:Find使用Activestate Perl 5.8.8在Windows上recursion一个fylesystem,并试图stat $File::Find::name ; 所以我不是stat -ing从文本文件得到的文件名需要chomp -ing或删除换行符。 我无法得到文件修改时间,在mtime

 my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($File::Find::name); 

所以试试

 -s $File::Find::name 

给我的错误:

包含换行符的文件名失败

一个典型的文件名是F01-01-10 Num 0-00000.pdf,但是我得到了同样的错误,甚至在E02.pdf中重命名

根据perldiag,如果任何文件操作失败,并且文件名恰好包含换行符,将会发出警告“包含换行符的文件名不成功”。

假设是,正如你所说,文件名来自标准输入或类似的,用户已经忘记chomp新行。 无论如何,你可能想通过chomp传递字符串,只是为了看看它是否工作。

有一些证据表明&CORE::stat mtime可能会被操作系统patchlevel和ActiveState Perl版本的一些组合破坏 – 建议的解决方法是使用File :: stat模块,如下所示:

 my $sb = stat($File::Find::name); my $mtime = scalar localtime $sb->mtime; 

…您可能会发现File :: stat的对象表示比CORE::stat返回的列表更方便。

即使我试图删除文件夹时也遇到同样的错误。 在使用rmtree命令之前,我使用了chomp。 这解决了我的问题。

在我的脚本中遇到这个相同的问题,发现我的错误是当我创建文件我标记了一个日期戳到最后忘记chomp我的$ DATE变量之前,将其添加到文件名。

是的,只要用手建立标量就自己碰到了这个。 抓住了我的头,直到我意识到我已经在文件名中包含时间/日期戳记。 Chomp日期命令和瞧,问题解决了。