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

时间:2010-04-16 10:46:04

标签: windows perl

我收到一个我不明白的错误。我正在使用File:Find使用Activestate Perl 5.8.8在Windows上递归fylesystem并尝试统计$File::Find::name;所以我不是stat - 从需要chomp - 或删除换行符的文本文件扫描中获取的文件名。我无法获得文件修改时间mtime in:

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重命名

,我也会遇到同样的错误

4 个答案:

答案 0 :(得分:11)

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

假设,正如您所说,文件名来自标准输入或类似文件,并且用户忘记了换行符chomp。无论如何,您可能希望将字符串传递给chomp,只是为了查看它是否有效。

&CORE::stat mtime可能因操作系统补丁级别和ActiveState Perl版本的某些组合而被破坏 - 建议的解决方法是使用some evidence模块,如下所示:

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

是的,我自己用手工打造的标量碰到了这个。我的头稍微划了一下,直到我意识到我在文件名中包含了一个时间/日期标记。 Chomp the date命令和瞧,问题解决了。