我对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
为什么我会在作业完成时收到错误代码?我错过了什么?
谢谢大家!
答案 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 $!;