相关疑难解决方法(0)

Perl中的异常有什么问题?

另一个问题的讨论让我想知道:Perl缺少其他编程语言的异常系统是什么?

Perl的内置异常有点特别,因为它们像Perl 5对象系统一样,在事后的想法中加以分类,并且它们超出了其他不专门用于异常的关键字(evaldie).

与具有内置try/throw/catch类型语法的语言相比,语法可能有点难看.我通常这样做:

eval { 
    do_something_that_might_barf();
};

if ( my $err = $@ ) { 
    # handle $err here
}
Run Code Online (Sandbox Code Playgroud)

有几个CPAN模块提供语法糖来添加try/catch关键字,并允许轻松声明异常类层次结构等等.

我在Perl的异常系统中看到的主要问题是使用特殊的全局$@来保存当前错误,而不是catch从范围的角度来看可能更安全的专用类型机制,尽管我从来没有亲自遇到任何问题$@得到了.

syntax perl exception-handling exception

29
推荐指数
4
解决办法
4597
查看次数

如何在Perl中干净地处理错误检查?

我有一个Perl例程来管理错误检查.基于先前的成功,大约有10种不同的检查,有些是嵌套的.这些通常不是特殊情况,我需要croak/ die.此外,一旦发生错误,执行其余检查就没有意义了.

但是,我似乎无法想出一个简洁的方法来解决这个问题,除非使用类似于以下可怕的黑客的东西:

sub lots_of_checks
{

 if(failcond)
 {
  goto failstate:
 }
 elsif(failcond2)
 {
  goto failstate;
 }

 #This continues on and on until...

 return 1; #O happy day!

 failstate:

 return 0; #Dead...
}
Run Code Online (Sandbox Code Playgroud)

我希望能做的事情是这样的:

do
{
 if(failcond)
 {
  last;
 }
 #...
};
Run Code Online (Sandbox Code Playgroud)

perl

1
推荐指数
4
解决办法
380
查看次数

标签 统计

perl ×2

exception ×1

exception-handling ×1

syntax ×1