为什么在离开Try :: Tiny时,Perl没有为try / catch提供错误

时间:2014-09-16 22:13:59

标签: perl

我正在移动一些代码而忽略了使用Try :: Tiny'在一段代码上。当我运行它时,perl会运行两个代码块,因此捕获会触发,幸运的是让我看到错误。似乎try和catch被用作标签。我以为标签后面需要一个冒号?为什么没有人抓住这个?

这里是代码:

#!/grid/common/bin/perl

use strict;
use warnings 'all';

foo();

sub foo {

    try {
    print("hi\n");
    }
    catch {
    die "FATAL: this went wrong, <$@>";
    }

}

1 个答案:

答案 0 :(得分:12)

indirect object syntax咬你。

try {
  print("hi\n");
}
catch {
  die "FATAL: this went wrong, <$@>";
}

获取解释为:

(do { print("hi\n") })->try(
   (do { die("FATAL: this went wrong, <$@>") })->catch
)

是的,真的。

当检测到间接方法调用时,有一个名为indirect的模块可以为您提供编译时警告。