对于没有故事的问题,请跳到行后。
我在胡闹,将一串可能出现的字母和数字拆分为 hashref 中的两个字段。只有当该字段存在时,它们才应该出现。字符串可能如下所示:/^\D*\d*$/
,例如ZR17
, R15
, -19
, 22
。
我不想像这样简单地把它放在两个变量中,因为实际的 hashref 有点长,我想把东西放在一起。
my $asdf = "ZR17";
my ($x, $y) = $asdf =~ m/^(\D*)(\d*)$/;
my $foo = {
foo => $x,
bar => $y
};
如果我不想foo
在 string 的情况下没有密钥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