我得到了这个预期的输出
perl -MData::Dumper -e 'print Dumper do q(./dotest.pl)'
$VAR1 = [
1,
2,
3,
4
];
而dotest.pl
use strict;
use warnings;
my $x=1;
if ($x) {
my $ret = [
# map { my %h = (x => $_); \%h }
1..4
];
}
sub foo { 1 }
但是,当我取消注释地图转换时,单行程序不会输出任何内容。
这是一个错误吗?perl 是5.34.0
您没有检查是否捕获了异常
do
,但是事实并非如此。除了捕获异常之外,它的行为还应与以下相同:
像您一样,我从该
do
版本中没有得到任何东西,但上面的内容却转储了 AoH。所以它们的行为不一样。该
do
版本没有按应有的方式返回最后一个表达式求值的结果(赋值)。所以,是的,这是一个错误。而且它在 5.40 中仍然存在。这是某种上下文问题。
do
在标量上下文中调用有效。不过,您所发布的内容确实超出了可接受代码的极限:)