与Moose,Try :: Tiny和TryCatch的奇怪行为

Joe*_*Joe 8 perl moose

我刚开始和Moose一起工作,遇到了一个我无法弄清楚的奇怪问题.以下代码:

#!/usr/bin/env perl
use strict;
use warnings;
use Try::Tiny;

{
    package Foo;
    use Moose;
    has x => ( is => 'ro', isa => 'Int' );
}

my $f; 
try {
    $f = Foo->new(x => 'x');
} catch {
    die "oops\n";
}
print $f->x . "\n";
Run Code Online (Sandbox Code Playgroud)

生产:

Can't call method "x" on an undefined value at m2.pl line 19.
Run Code Online (Sandbox Code Playgroud)

但是,如果我替换Try::TinyTryCatch,它会像我认为的那样:

oops
Run Code Online (Sandbox Code Playgroud)

即使x是正确的值,也就是说5,Try::Tiny仍然产生了undefined value错误.

正如我一直在阅读的所有Moose文档一样Try::Tiny,我对此代码无效的原因感到非常困惑.我在这里做错了吗?

dus*_*uff 16

Try::Tiny 在try/catch节结束时需要分号:

try {
    $f = Foo->new(x => 'x');
} catch {
    die "oops\n";
};
Run Code Online (Sandbox Code Playgroud)

这是由于Try::Tiny- try并且catch都是函数的实现.