如何在 strawberry perl 中获取最后执行的命令的值

how to get the value of last executed command in strawberry perl

我正在尝试执行一个简单的草莓 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
success

如果您查看 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 returns 1 成功(真实值),所以我删除了您的 == 0 在测试成功。使用 Perl,if(COND){...} 语句中的任何真值都可以;您不需要显式测试 1.

关于路径:/ 字符可用作路径定界符,即使您使用 Windows 也可以,除非在某些情况下您可能将路径发送到外部程序。此功能允许您相对可移植地编写将路径表示为 foo/bar/baz 的代码,并且它将与 Windows 一起工作,类似于它在 *nix 操作系统下的工作方式。使用正斜杠作为分隔符可以避免转义路径中的每个反斜杠:foo\bar\baz.