【发布时间】:2014-06-17 08:31:01
【问题描述】:
在 perl 中,可以使用哈希,例如my %a = (2, "two"); 以及 hashrefs,例如my $b = {2 => "two"};
每当我创建多维散列时,顶级散列的值始终是散列引用,即在它们上调用 ref() 会返回 "HASH"。是否有可能在没有额外间接级别的情况下拥有仅由哈希组成的哈希?
此外,当使用散列的散列时,perl 允许在访问子散列的元素时省略解引用运算符:
my %a;
$a{2} = {2 => "two"};
# the following are both valid:
$a{2}->{2}
$a{2}{2}
我假设第二个只是第一个的语法糖。但是,这似乎与简单的非嵌套 hashref 所需的语法不一致,因为 $b->{2} 有效,而 $b{2} 无效。
我问的原因是我想说
for my %hash (values %a) {
甚至
for my %hash (map(%{$_}, values %a)) {
但这两种方法都会在编译时导致“循环变量上缺少 $”错误。
【问题讨论】:
-
只回答标题:不,不可能。不过,您的问题值得更长、更有见地的答案。 . .
-
"for my %$hash (values %a) {" 应该在那里实现你的目标。
-
@Casao:不,那是错误的。 Perl 循环变量必须是标量
-
@Max Wallace,不。哈希和数组只能包含标量。
-
$b->{2}不能缩写为$b{2},因为它意味着别的东西。$b{2}->{2}可以缩写为$b{2}{2},因为它没有任何意义。
标签: perl hash syntax multidimensional-array nested