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

use*_*944 4 perl move

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

我使用move from File::Copy来重命名文件夹.它按预期工作,但是当我看到之后的返回值变量时$!,它会显示错误.

我使用的相关代码:

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

move($file,$helpr);
print $!;
Run Code Online (Sandbox Code Playgroud)

输出:

[j@box test]$ ls
my.test.dir
[j@box test]$ fileRenamer.pl
No such file or directory
[j@box test]$ ls
my test dir
Run Code Online (Sandbox Code Playgroud)

无论如何,当作业完成时,为什么会出现错误代码?我错过了什么?

感谢大家!

TLP*_*TLP 6

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

我以前见过这个,看起来好像File::Copy$!虚假的.我查看了源代码,发现了这一行:

($tosz1,$tomt1) = (stat($to))[7,9];
Run Code Online (Sandbox Code Playgroud)

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