1
我正在使用Marpa::R2,並試圖使用Try::Tiny來捕獲錯誤。我很困惑,因爲當我將解析代碼放入try
塊中時,value
方法的結果是undef
。這裏是我的代碼:嘗試後的內部狀態更改{} Block
use strict;
use warnings;
use Marpa::R2;
use Data::Dumper;
use Try::Tiny;
my $grammar = Marpa::R2::Scanless::G->new(
{
source => \(<<'END_OF_SOURCE'),
:default ::= action => ::array
:discard ~ ws
ws ~ [\s]+
:start ::= Name
Name ::= Foo
Foo ~ [\w]+
END_OF_SOURCE
}
);
my $reader = Marpa::R2::Scanless::R->new(
{
grammar => $grammar,
}
);
my $input = 'foo';
try{
$reader->read(\$input);
}catch {
warn "caught error: $_";
}
my $value = $reader->value;
print Dumper $value;
我會一點點堅果試圖找出究竟是什麼語法,然後我意識到,去掉try
塊由$reader->value
非空值。即使我的try
塊內分配$value
,它成爲undef
當塊已完成:
my $value;
try{
$reader->read(\$input);
$value = $reader->value;
}catch {
warn "caught error: $_";
}
print Dumper $value;
這似乎意味着,如果我想趕上錯誤與Try::Tiny
,我已經把我所有的$value
處理進入try
區塊,這很不方便。
任何人都可以告訴我是什麼原因引起的(我想解釋一下在Perl中這是如何實現的)?有沒有辦法解決它?