我想在表达式中使用哈希.没问题:
use strict; use warnings; my %h = (a=>1,b=>2); my $h = $h{a}; print "h='$h'\n";
但由于我只提到它一次,我不想命名它.天真地用哈希内容替换$h不起作用.以下代码在“){”的第3行产生语法错误:
use strict; use warnings; my $x = (a=>1,b=>2){a}; print "x='$x'\n";
我知道以下是实现我需要的方法:
use struct; use warnings; my $y = {a=>1,b=>2}->{a}; print "y='$y'\n";
为什么第二个例子不起作用?
编辑1:这是一个MVCE.在现实生活中,我的哈希键(本例中为’a’)不是常量.
编辑2:关于我的动机更多一点:我不想在我的代码中使用不必要的变量范围,所以如果我将%h的范围限制在它真正属于的范围,我会这样:
use strict; use warnings; my $h; { my %h = (a=>1,b=>2); $h = $h{a}; } print "h='$h'\n";
我不想将%h留在范围内以获得比我需要的代码更多的代码,但是使用额外的块来编写代码段也很笨拙.这就是为什么我正在寻找一种干净的单行方式来完成任务.