这是从perl中的子例程返回错误消息的好方法吗?
sub some_subroutine{
# do something
$something = 14;
if(1 == 2){
$_ = "This should not be happening!";
return undef;
}
return $something;
}
my $ret=some_subroutine();
print "ERROR: $_" unless(defined $ret);
Run Code Online (Sandbox Code Playgroud)
代码运行正常(在并行世界中,在哪里1 == 2),但使用$_返回错误消息是一个好方法?我没有找到任何关于$_此类用途的使用文档.
谢谢!
Sch*_*ern 23
$_ 这是一个很好的机制,因为许多其他东西使用和设置它.
您可以设置一些其他全局变量,如$ Error,但最好的方法是抛出异常.然后用户不必总是检查,忘记,它只是发生.在Perl中,使用" die " 生成异常.die会带一个字符串或一个对象.有许多模块可以让抛出异常更容易,包括Exception :: Class,Exception :: Simple,Ouch和autodie.
您可以使用eval {}捕获异常,但是有很多问题,所以你应该使用像Try :: Tiny这样的东西.
使用全局变量来保存错误消息并不是未知数.例如,内置函数使用$!和DBI使用$DBI::errstr.但是你继承了使用全局变量的所有问题.信号处理程序需要对它们进行本地化,析构函数可能会破坏它们,多线程问题等.
在我看来,抛出异常(例如使用die)是一种更常见的选择.
无论你做什么,都不要使用$_.它经常被别名,所以使用它可能会产生意想不到的后果.
| 归档时间: |
|
| 查看次数: |
10391 次 |
| 最近记录: |