Perl中双'at'(@@)的含义是什么?

时间:2013-10-14 03:28:52

标签: perl variables syntax

我正在审查我们使用的Perl工具提供的供应商提供的补丁,我正在努力找出特定类型更改的原因 - 传递给子例程的参数的'@'预先挂起

例如,一行是:

my ($genfd) = @_;

现在:

my ($genfd) = @@_;

我不是Perl开发人员,我在这里学习,但到目前为止我understand that '@_'是提供给封闭子程序的参数。

I also understand上面的赋值('$ genfd'包含在左侧的括号中)将'@_'强制转换为列表,然后将'genfd'标量变量赋给第一个元素那份清单。这应该导致子程序的第一个参数存储在'genfd'中。

我完全坚持的是第二个'@'的不同之处。我found examples of this usage on GitHub但是从来没有解释过,也无法找到任何Perl引用或SO的解释。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:18)

看起来像是一个糟糕的补丁。

@@_是语法错误。至少,当我有以下Perl源文件时:

#!/usr/bin/perl

use strict;
use warnings;

sub foo {
    my ($genfd) = @@_;
}

在其上运行perl -cw(使用Perl 5.14.2)会给出:

Bareword found where operator expected at tmp.pl line 7, near "@@_"
        (Missing operator before _?)
syntax error at tmp.pl line 7, near "@@_"
tmp.pl had compilation errors.

我没有查看GitHub上的所有示例,但其中许多都是带有,v后缀的文件。该后缀由RCS和CVS用于其内部版本控制文件。我认为@字符有一些特殊含义,所以它加倍表示文字@字符。 (是的,在Git存储库中安装RCS或CVS内部文件有点奇怪。)

某种RCS或CVS交互是错误的最可能解释,但可能还有其他原因。

您应该询问提供补丁的人。