是默认变量。它常用于内置函数的默认参数。

    这与下列代码相同:

    1. while ( $it = <> ) {
    2. }

    $0

    $0 包含执行程序的名称,正如给 Shell 的一样。如果程序直接通过 Perl解释器执行,那么 $0 包含文件名称。

    $0 是 C 程序员期望从 argv 数组找到的第一个元素。

    @ARGV

    @ARGV 包含给程序的参数,顺序与 Shell 中一样。

    1. $ perl -e 'print join( ", ", @ARGV), "\n"' 1 2 3
    2. 1, 2, 3
    3. $ perl -e 'print join( ", ", @ARGV), "\n"' 1 "2 3" 4
    4. 1, 2 3, 4

    C 程序员可能会搞混,因为 $ARGV[0] 是他们的 。不要犯这样的错。

    Perl 程序员通过后置或前置到 @INC 添加库路径。眼下,使用 use lib 代替。下面的代码等效:

    %ENV

    %ENV 包含当前环境的拷贝。该环境由 Perl 创建的子 Shell 所给予。

    这对 taint 模式很重要,%ENV 具有能修改 Shell 行为的内容。正因如此,perlsec 推荐在 taint 模式执行命令时使用下列代码:

    1. delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};

    %SIG

    Perl 具有丰富的信号处理能力。使用 %SIG 变量,你能够在当信号发送给运行的进程时执行任意子例程。

    如果你有耗时进程,这将特别有用。通过发送信号(通常是 SIGHUP)来重载配置,你不必启动和停止进程。

    通过分别赋值 $SIG{DIE}$SIG{WARN},你也可以更改 和 warn的行为。

    如果程序收到任何参数,它们将分成文件名及其内容发送给 <>。否则,使用标准输入(STDIN)。

    <> 对于过滤程序特别有用。

    <DATA> 和DATA

    如果程序包含自身为一行的魔法标记 DATA,那么它下面的任何东东均可通过魔法 <DATA> 句柄为程序所用。

    如果你想在程序中包含数据,但又想与主程序逻辑分开,那么这将特别有用。

    $!

    当使用 system 执行命令时,如果命令返回非真状态,那么 $! 将为真。否则,可能未被执行。$! 将包含出错消息。

    如果使用 eval,那么 $@ 将包含 eval 所抛出的语法错误。