加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 为什么(a => 1,b => 2){a}语法错误?

发布时间:2020-12-15 23:21:08 所属栏目:大数据 来源:网络整理
导读:我想在表达式中使用哈希.没问题: 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
我想在表达式中使用哈希.没问题:

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留在范围内以获得比我需要的代码更多的代码,但是使用额外的块来编写代码段也很笨拙.这就是为什么我正在寻找一种干净的单行方式来完成任务.

解决方法

看,(something1,something2,…)不是数组构造函数.这只是一种说法解释“我们在列表上下文中有所作为”的方式.您可以理解每个(a,b,c,…)用法,例如对没有名称的数组的赋值.所以,是的,我们可以通过索引从这个数组中获取一个值. (‘a’=> 1,’b’=> 2)[1]将返回1.

如果左侧是哈希变量,则仅在列表上下文中赋值后才会创建哈希值.在赋值之前,我们不能像hash那样使用这个列表,因为我们没有hash.所以不允许postcircumfix操作{…}.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读