gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:17:12 25 4
gpt4 key购买 nike

我想在表达式中使用哈希。没问题:

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 留在范围内用于比我需要的更多代码,但是编写带有额外块的代码段用于范围界定也很笨拙。这就是为什么我正在寻找一种干净的单行方式来进行分配。

最佳答案

my $x = (a=>1, b=>2){a}; ,这不代表哈希。这是一个具有以下值的列表:'a', 1, 'b', 2 . => , aka fat-comma 只是一个美化的逗号,其特点是它引用了左侧的值。它并不隐含地意味着我们正在处理/创建一个哈希。例子:

my @array = ('a' => 1 => 'b' => 2);

获取值 1从显示的原始代码中,您必须执行 my $x = (a=>1, b=>2)[1]; .

您使用的 hashref 方法: my $y = {a=>1, b=>2}->{a};是使用匿名哈希的标准方法。

关于perl - 为什么 (a=>1,b=>2){a} 是语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37121192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com