perl 如果在sort()过程中使用了不存在的模块,则脚本将终止- DateTime::TimeZone::Local示例

qfe3c7zg  于 2022-11-15  发布在  Perl
关注(0)|答案(1)|浏览(132)
use DateTime::TimeZone::Local;
use Test::More tests => 1;

my @input = (1 .. 10 );
my (@output) = sort {
    DateTime::TimeZone::Local->TimeZone();
    $a cmp $b
} @input;

is_deeply(\@output, \@input);

输出量:

1..1
Can't return outside a subroutine at /usr/local/share/perl/5.8.8/DateTime/TimeZone/Local.pm line 72.
# Looks like your test exited with 9 before it could output anything.

shell returned 9

我已经检查过了,它肯定在一个子例程里面。它看起来和所使用的模块没有任何关系,这段代码也会导致同样的错误:

my @output = sort {
    sub1();
} (1 .. 5);

sub sub1 {
    eval "use ModuleDoesntExist";
    return 1; # remove this and get a seg fault
}

看起来这是perl中的一个bug。有什么想法吗?更感兴趣的是为什么会发生这种情况,而不是解决方法-它只会在模块不存在的情况下发生。

kb5ga3dv

kb5ga3dv1#

看起来它实际上是Perl中的一个bug。请参见Perl移植者列表中的this thread

相关问题