我需要知道如何在Perl中自定义我自己的错误。例如,这里有一些代码:
my $filename = 'filaname1.exe';
print "Copying $filename";
copy("$dir_root\\$filename", "$spcl_dir\\$filename");
if ($? == "0") {
print " - Success!\n";
}
else { print " - Failure!\n"; }
我尝试写这个并“捕获”错误并在我没有得到退出代码0时打印“失败”,并在我这样做时打印“成功”。我需要知道如何定制这个;我真的不想使用die
或类似的东西,它会给一些有点神秘的错误(给最终用户)。
谢谢!
答案 0 :(得分:4)
您需要阅读有关$的文档吗?在perlvar。该值为:
最后一个管道返回的状态 close,backtick(“``”)命令, 成功调用wait()或 waitpid(),或从系统() 操作
你的复制电话(大概来自File :: Copy)并不是这些类别中的任何一个,所以$?没有设定。
但是,如果您阅读File::Copy的文档,您将看到其功能全部“成功时返回1,失败时返回0”。所以你可以大大简化你的代码。
#!/usr/bin/perl
use strict; use warnings;
use File::Copy;
if (copy('notthere', 'somewhere else')) {
warn "success\n";
} else {
warn "failure: $!\n";
}
请注意,我使用了“警告”而不是“打印”,以便将错误发送到STDERR。另请注意,使用$!显示操作系统错误。当然,如果它不够用户友好,就可以省略。
答案 1 :(得分:1)
您使用的是File :: Copy吗?你必须使用某些东西,因为copy()不是perl关键字或内置函数。
documentation of File::Copy不是指$?所以,这可能是你的错。您想检查返回值,并且只有在它为零时,请参阅$!。
use strict;
use File::Copy qw(copy);
my ($from, $to) = @ARGV;
my $res = copy ($from, $to);
if( $res ){
print "Okay\n";
}
else{
print "Not Okay: $!\n";
}