我正在尝试执行一个简单的Strawberry Perl脚本进行文件复制,以从上次执行的命令中获取代码。但是在所有情况下我都得到0/成功。
我的test.pl脚本中的代码
use File::Copy;
use strict;
use warnings;
my $source_file = "D:\\abc\\def\\in\\test\\test1.csv";
my $target_file = "D:\\abc\\def\\in\\test\\test2.csv";
if ( copy( $source_file, $target_file ) == 0 ) {
print "success";
}
else { print "fail"; }
由于我使用
D:\\abc\\def\\in\\test\\test1.csv
的路径在机器上不存在,因此无论提供什么,我都希望会失败,但是我会成功。执行和输出后:
D:\ pet \ common \ bin \ backup> perl test.pl
成功
最佳答案
如果查看perldoc File::Copy
,您将看到以下内容:
RETURN
All functions return 1 on success, 0 on failure. $! will be set if an
error was encountered.
因此,如果出现错误,您的代码应公开
$!
中的内容:if ( copy($source_file, $target_file)) {
print "success\n";
}
else {
warn "fail: $!\n";
}
另外,如File::Copy文档中所述,
copy
成功返回1
(一个真实值),因此我在成功测试中删除了== 0
。使用Perl,if(COND){...}
语句中的任何真实值都可以;您不需要显式测试1
。关于路径:
/
字符可用作路径定界符,即使您使用Windows,除非某些情况下可能会将路径发送到外部程序。此功能使您可以相对方便地编写将路径表示为foo/bar/baz
的代码,并且它可以在Windows下使用,类似于在* nix操作系统下的工作方式。使用正斜杠作为分隔符,可以避免转义路径中的每个反斜杠:foo\\bar\\baz
。
关于perl - 如何获取草莓perl中最后执行的命令的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58403980/