为什么Perl的File :: Copy似乎无声地失败?

Pau*_*och 4 perl copy windows-server-2008

我有一个适用于Windows XP的Perl脚本.它使用File :: Copy的move功能将目录树移动到同一驱动器上的另一个位置.该脚本在Windows 2008上失败(静默).没有任何移动,没有删除任何内容.

我正在使用ActiveState Perl 5.10.0 Build 1005和它附带的File :: Copy.

有人知道Windows 2008上的ActiveState Perl可能会导致这个问题吗?

示例脚本:

use File::Copy;
print "Move AAA to ZZZ\n";

move("AAA", "ZZZ");

print "Done.\n";
Run Code Online (Sandbox Code Playgroud)

cas*_*key 12

文档:

返回

所有函数在成功时返回1,在失败时返回0.$!如果遇到错误,将设置.

这个例子无声地失败,因为什么都没有检查$!失败了.试试这个:

move($from, $to) || die "Failed to move files: $!";
Run Code Online (Sandbox Code Playgroud)

  • 该脚本可能未在与文件相同的目录中运行.源或目标不得存在.不要忘记,如果您要转移到/ a/b/c,/ a/b必须已经存在. (3认同)

Bra*_*ert 8

如果您不想检查返回值,可以autodie为您执行此操作.

由于move()copy()返回零表示错误,这就是autodie假设,它是相当直接的.

use strict;
use warnings;
use File::Copy;

use autodie qw'copy move';

move("AAA", "ZZZ"); # no need to check for error, because of autodie

print "Done.\n";
Run Code Online (Sandbox Code Playgroud)

假设" AAA"不存在,这里是输出(on STDERR).

Can't move('AAA', 'ZZZ'): No such file or directory at test.pl line 7