问题 @ $和$$在Perl中意味着什么?


好的,关于奇怪语法的两个问题。我正在研究一些需要修改的旧Perl代码,我遇到了以下行:

@$tmp=split(/,/,$tmpVals);

我不知道怎么读这个,看起来RHS正在拆分变量字符串,所以没关系,但它是左手边我被抛出。世界上有什么 @$,据我所知,它不是默认变量。有人知道它的意义吗?

然后有 $$我读过的通常代表Perl PID。但是,在这种情况下,它出现在veriable / assignment语句之前。它有相关的影响吗?

$$tmp=$row[1];

提前致谢。


3176
2018-06-15 20:09


起源



答案:


你所看到的不是特殊的perl变量,而是引用的实例。他们被描述在 perlref

这些是象征性的参考:如果 $tmp 包含“myvar”,然后是变量 @myvar 将被分配到。这同样适用于第二个例子。


15
2018-06-15 20:12



看起来你是对的。在搜索那些奇怪的符号时,Google往往不会返回结果。谢谢您的帮助。 - Brian
@Brian:如果这解决了您的问题,请点击它旁边的复选标记,以便Michael给出答案 - Daenyth
谢谢,刚刚确认了。 Perl应该要求括号用于此功能,当符号分开时很明显,例如:$($ varname) - Brian
无法从提供的代码中了解这些是否是符号或“硬”引用。在任何一种情况下都使用相同的语法(除了不允许符号引用 use strict) - friedo
@Brian =>你可以用 @{$tmp} 这意味着同样的事情 @$tmp。当变量是一个简单的标量时,Perl允许你删除括号。 - Eric Strom


答案:


你所看到的不是特殊的perl变量,而是引用的实例。他们被描述在 perlref

这些是象征性的参考:如果 $tmp 包含“myvar”,然后是变量 @myvar 将被分配到。这同样适用于第二个例子。


15
2018-06-15 20:12



看起来你是对的。在搜索那些奇怪的符号时,Google往往不会返回结果。谢谢您的帮助。 - Brian
@Brian:如果这解决了您的问题,请点击它旁边的复选标记,以便Michael给出答案 - Daenyth
谢谢,刚刚确认了。 Perl应该要求括号用于此功能,当符号分开时很明显,例如:$($ varname) - Brian
无法从提供的代码中了解这些是否是符号或“硬”引用。在任何一种情况下都使用相同的语法(除了不允许符号引用 use strict) - friedo
@Brian =>你可以用 @{$tmp} 这意味着同样的事情 @$tmp。当变量是一个简单的标量时,Perl允许你删除括号。 - Eric Strom