perl move抛出错误,但确实移动了文件

时间:2013-11-08 13:48:40

标签: perl move

我对perl很新,只是发现了一些非常意外的行为。

我使用从File::Copy移动来重命名文件夹。它按预期工作,但是当我稍后查看返回值变量$!时,它会显示错误。

我使用的相关代码:

$helpr =~ s/\./ /g;

move($file,$helpr);
print $!;

输出:

[j@box test]$ ls
my.test.dir
[j@box test]$ fileRenamer.pl
No such file or directory
[j@box test]$ ls
my test dir

为什么我会在作业完成时收到错误代码?我错过了什么?

谢谢大家!

2 个答案:

答案 0 :(得分:6)

正如mpapec所说,除非move返回false值,否则不应使用错误消息,例如与... or die $!。但是,至于为什么会发生这种情况:

我以前见过这个,似乎File::Copy虚假地设置$!。我查看了源代码,发现了这一行:

($tosz1,$tomt1) = (stat($to))[7,9];

其中$to是文件移动到的文件名。此检查用于处理覆盖文件的异常,如果该文件不存在,则自然会设置$!。我会将此归类为各种错误。

答案 1 :(得分:3)

仅在$!失败(返回false),

时检查move()才有意义
move($file,$helpr) or print $!;