我有一个变量,我想进行第一次捕获并将其用作散列的关键字。我找到了解决方案,但似乎不是最理想的。
My $out = $hash{[$var =~ /(^[a-z]+)/]->[0]};
似乎必须有一个更好的方法然后去list-> array->标量。也许只是list->标量。我知道我也可以捕获另一个变量,然后将其用作关键,但我想避免这种情况。有更好的方法吗?
答案 0 :(得分:5)
无需创建数组引用。
my $out = $hash{ ($var =~ m/(^[a-z]+)/)[0] };
答案 1 :(得分:3)
没有必要将所有内容都塞进一个语句中
my ($key) = $var =~ /(^[a-z]+)/;
my $out = $hash{ $key };
但是这样的话会没事的
my $out;
$out = $hash{$1} if $var =~ /(^[a-z]+)/;
或可能
my $out = $var =~ /(^[a-z]+)/ && $hash{$1};
答案 2 :(得分:0)
出了什么问题?
$var =~ /^([a-z]+)/;
my $out = $hash{$1};
在列表上下文中使用=~
的输出用于多个匹配是有用的,但对于单个匹配?
如果您希望正则表达式不匹配(按照其他人的建议),最好先检查一下。例如:
if( $var =~ /^([a-z]+)/ ) {
my $out = $hash{$1};
...
}
如果您想要单行,您可以使用:
my $out = $hash{ ($var =~ /^([a-z]+)/)[0] };
如果正则表达式不匹配,这将发出警告。首先由@tinita建议。