我刚开始和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::Tiny
为TryCatch
,它会像我认为的那样:
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
都是函数的实现.