perl - 如何获取草莓perl中最后执行的命令的值

标签 perl error-handling copy file-copying strawberry-perl

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

相关文章:

android - 如何将文件从 Assets 文件夹复制到android中的.../数据库文件夹

.net - .NET 中的 System.String.Copy 有什么用?

mysql - 使用Perl程序在MySQL的列中插入多行

perl - 在 perl 中从函数返回 +{} 或 {} 与返回 ref 或 value 之间的区别

oracle - PL/SQL异常处理

asp.net-mvc - [授权]失败后显示404错误页面

c - 在 C 中重复数组 "i"次中的每个元素

javascript - 使用显示/隐藏单选按钮将数组打印到 Div

arrays - 在 Perl 中通过索引从数组中排除元素的最佳方法是什么?

python - 如何在python中为提供none值编写异常