Perl:如何理解@$ref[0]?

7

关于 Perl 中的引用问题。

$ref = [11, 22, 33, 44];
print "$$ref[0]" . "\n";
print "@$ref[0]" . "\n";

当我运行 perl -d 命令时。
DB<1> p @$ref
11223344
DB<2> p $ref
ARRAY(0x9dbf480)
DB<3> p \$$ref[0]
SCALAR(0x9dbf470)
DB<4> p \@$ref[0]
SCALAR(0x9dbf470) 

$$ref[0]代表ARRAY(0x9dbf480)的第一个标量。

@$ref[0]是什么意思?我不理解。


5
考虑阅读 perlolperldsc。它们在解释这些内容方面做得很好。 - user166390
1
反斜线是引用操作符,你正在调用 $$ref[0] 和 @$ref[0],你正在进行解引用然后再次要求引用,你几乎肯定不打算那样做。 - Dondi Michael Stroma
2个回答

11

$ref = [11, 22, 33, 44]; 是一个指向匿名数组的引用。

$$ref[0] 或者 ${$ref}[0] 或者 $ref->[0] 是对数组进行解引用并获取第一个元素。

@$ref[0] 或者 @{$ref}[0] 是对数组进行解引用并返回只包含第一个元素的数组片段。


4

首先,@$ref[0]\@$ref[0]是不同的。你的调试会话中有前者,而你的脚本中有后者。

无论如何,@$ref[0]的意思与@{$ref}[0]相同。如果你有一个名为@ref的数组,@ref[0]将成为等价物。它使用切片符号来获取数组的第一个元素。

@array[$x]$array[$x]之间的区别在于,前者可以指定多个索引并从数组中返回一组元素,而不仅仅是一个。但是,如果在方括号之间只放置一个索引,你将得到相同的结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接