4

我对 perl 很陌生,只是发现了一些非常意想不到的行为。

我使用 move fromFile::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

无论如何,当工作完成时,为什么我会收到错误代码?我错过了什么?

谢谢大家!

4

2 回答 2

6

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

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

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

$to文件被移动到的文件名在哪里。这个检查是为了处理覆盖文件的异常,如果文件不存在,自然$!会被设置。我会将其归类为某种错误。

于 2013-11-08T14:05:42.080 回答
3

仅在失败时检查$!才有意义move()(返回 false),

move($file,$helpr) or print $!;
于 2013-11-08T13:56:01.253 回答