Perl 在这个变量声明中,{}大括号的含义是什么?

Perl 在这个变量声明中,{}大括号的含义是什么?,perl,Perl,我在一些代码中看到了如下声明: $test = "test"; $test1 = "tes2"; $i = 2; $var{$test}{$test1}{"cnt"}[$i] = $var_val; # What exactly is this? 如果他们提到大括号,那就是连接。我真的不明白这是什么 我猜最后一个变量类似于$vartest1cnt2不,不是真的。%var是数组散列的散列 %var是一个散列 $var{$test}=>$var{“test”}是一个散列 $var{

我在一些代码中看到了如下声明:

$test  = "test";
$test1 = "tes2";
$i     = 2;
$var{$test}{$test1}{"cnt"}[$i] = $var_val;    # What exactly is this?
如果他们提到大括号,那就是连接。我真的不明白这是什么


我猜最后一个变量类似于
$vartest1cnt2

不,不是真的。
%var
是数组散列的散列

%var
是一个散列

$var{$test}
=>
$var{“test”}
是一个散列

$var{$test}{$test1}
=>
$var{“test”}{“tes2”}
是一个散列

$var{$test}{$test1}{“cnt”}
=>
$var{“test”}{“tes2”}{“cnt”}
是一个数组


$var{$test}{$test1}{“cnt”}[$i]=$var_val
$var_val
赋值给数组中的索引2

这是一个多维数据结构。
%var
是一个哈希。
$var{$test}
是一个哈希元素。
$var{$test val}{$test1}
意味着您的哈希元素是对另一个哈希元素的引用。
$var{$test{“cnt”}
意味着
$var{$test}{$test1}
本身就是对散列的引用。
$var{$test}{$test1}{“cnt”}[$i]
意味着前面的级别是对数组的引用。不理解引用是什么?

否,
%var
是散列

test
是散列中的一个键


$var{$test}
变成
$var{“test”}
,然后变成存储在该键上的任何值,这显然是另一个散列。其键
$test1
导致另一个散列,该散列有一个键
cnt
,该键导致一个数组,其索引
$i
(2)设置为
$var\u val

参见:标量、数组和散列。另外,
是串联。
($test.$test1)
“testtes2”
%var是散列!
$var
是未定义的:)@Matt Kane,噢,修复了这个问题。你的术语太草率了。
$var{test
不是散列。它是存储在散列中的键“test”的值。它可以是任何标量。直到我们看到
$var{$test}{…}
我们才知道
$var{$test}
持有一个散列引用。只是为了学究
$var{'test}}
是对散列等的引用。由于
perldoc perlreftut
中的“箭头规则”,您可以通过这种方式对arrayref进行赋值(这对于OP来说是一个很好的读物)@Michael Carman,你说得对,我有点马虎。我只是想尽可能简单地解释一下,以便最大限度地理解。你自己也是马虎,因为当
$var{$test}{…}
可能表示程序员认为它持有散列引用,我们在运行时之前无法确定。请尝试
perldoc-perlreftut
(参考教程)、
perldoc-perldsc
(数据结构烹饪书)和
perldoc-perlref
(Perl中引用的完整故事)