我正在尝试初始化一个包含多个表达式结果的 hashref。我希望返回未定义结果的表达式将 undef 分配给适当的键。相反,赋值只是吞噬了下一个键,就好像表达式从不存在一样。
一个简单的例子可能更容易理解:
use Data::Dumper;
my $str = "vs";
my $contains = {
t => ($str =~ /t/i),
u => ($str =~ /u/i),
v => ($str =~ /v/i),
};
print(Data::Dumper->Dump([$contains]));
我希望上面的代码能够打印出来:
$VAR1 = {
'v' => 1,
't' => undef,
'u' => undef
};
相反,我得到以下信息:
$VAR1 = {
't' => 'u',
'v' => 1
};
在分配中添加显式 undef 确实让我得到了我正在寻找的结果:
use Data::Dumper;
my $str = "vs";
my $contains = {
t => ($str =~ /t/i || undef),
u => ($str =~ /u/i || undef),
v => ($str =~ /v/i || undef),
};
print(Data::Dumper->Dump([$contains]));
然而,这对我来说似乎有点违反直觉。任何人都可以解释这种行为吗?