对于没有故事的问题,请跳到行后。
我正在把一串由一些字母和数字组成的字符串(这两种情况都可能出现)分成散列引用中的两个字段。仅当该字段存在时它们才应该出现。该字符串可能如下所示:/^\D*\d*$/
, 例如ZR17
, R15
, -19
, 22
.
我不想简单地将其放入这样的两个变量中,因为实际的 hashref 有点长,而且我想将内容分组在一起。
my $asdf = "ZR17";
my ($x, $y) = $asdf =~ m/^(\D*)(\d*)$/;
my $foo = {
foo => $x,
bar => $y
};
如果我不想带钥匙foo
如果是字符串17
,我可以说:
my $foo = {
( $x ? ( foo => $x ) : () ),
( $y ? ( bar => $y ) : () ),
};
我想出了将所有内容都放在 hashref 赋值中,如下所示:
my $asdf = "ZR17";
my $foo = {
( $asdf =~ m/(\d+)/ ? ( foo => $1 ) : () ),
( $asdf =~ m/(\D+)/ ? ( bar => $1 ) : () ),
};
print Dumper $foo;
这会产生以下结果:
$VAR1 = {
'bar' => 'ZR',
'foo' => 'ZR'
};
不知怎的,看起来只有一个$1
在这里,它变得混乱了。如果我注释掉第二行,foo
将17
.
有人能解释一下这里发生了什么吗?哪儿是$1
迷路/困惑?