$_ 默认输入/模式搜索空间,常用于-f -d测试、print unlink函数、m// s/// tr///匹配、foreach while循环
@_ 传递给函数的所有参数
$&/$/$' 分别是上次匹配成功(时/前/后)的字符串(这三个变量会导致效率显著降低)
local $_ = 'abcdefghi';
/def/;
print "$
:$&:$’n”; # prints abc:def:ghi
$+ 上次搜索中最后一个括号匹配的文本 /Version: (.)|Revision: (.)/ && ($rev = $+);
$^N 上次搜索中最后闭合的组所匹配的文本(可能嵌套) (?:(…)(?{ $var = $^N })); #这样可以省去计算括号个数
$* 匹配模式优化(即当其==0时,perl认为字符串仅为一行(n),推荐使用/s和/m代替此变量)
$. 相当于awk中的NR,但如果文件句柄被close(),$.就会复位,相当于FNR
$/ 相当于RS,正常情况设置为字符串;设置为undef即一口气全读入;设置为整数标量时则读入小于该整数的记录而不是行;一些小文件,可以采用$data = do { local $/;
$ 相当于ORS
$, 相当于OFS
$” 同$,不过用于向用”引起的字符串插入数据的时候
$; 模拟多维数组时下标的分隔符。 $foo{$a,$b,$c}; $foo{join($;, $a, $b, $c)}; #两者相当
$ | 设置为非零值时,强制刷新每次输出缓存;在向管道和套接字输出时设置该变量 |
$# 相当于OFMT,不过awk里是%.6g,perl里是%ng,n取决于OS上float.h 中 DBL_DIG 宏的值(不建议使用该变量)
@-/@+ 分别是模式匹配时,每次成功匹配字符串开始和结束处的偏移量
在对某个变量 $var 进行匹配后: $` 和 “substr($var, 0, $-[0])” 相同 $& 和 “substr($var, $-[0], $+[0] - $-[0])” 相同 $’ 和 “substr($var, $+[0])” 相同 $1 和 “substr($var, $-[1], $+[1] - $-[1])” 相同 $2 和 “substr($var, $-[2], $+[2] - $-[2])” 相同
$#+是最近成功匹配了多少个组
$[ 数组中的第一个元素/字符串中第一个字符的索引号,默认为0(最好不要改)
$] perl解释器版本(5.001格式)
$^V perl解释器版本(5.8.8格式)
$^T 程序运行时间(UNIX秒)
$$ perl脚本的运行进程号
$< perl脚本的运行实际用户
$> perl脚本的运行有效用户
$( perl脚本的运行实际用户组
$) perl脚本的运行有效用户组
$0 当前程序名
$@/$!/$^E/$? 分别是perl解释器、C库、操作系统、外部程序检测到的错误
eval q{
open my $pipe, "/cdrom/install |" or die $!;
my @res = <$pipe>;
close $pipe or die "bad pipe: $?, $!";
};
在需要 “eval” 的字符串没有通过编译(若 “open” 或 “close”导入的原型错误则可能发生)或者 Perl 代码在执行过程中 die() 掉,则 $@变量会被设置。这些情况下 $@ 的值是编译错误信息或 “die” 的参数(其中会内插 $! 和 $?)。(另见 Fatal)
上面的 eval() 表达式执行后,open()、”
在少数操作系统下,$^E 可能含有更详细的错误指示,例如“CDROM仓门没有关闭”。不支持扩展错误 信息的系统只是将 $^E 设置为和 $!一样的值。
最后,$? 在外部程序 /cdrom/install 失败时设置为非 0 值。高8位反映出该程序遇到的特定错误 条件(程序的 exit() 值),低8位反映失败方式,例如信号致死或核心转储,细节参见 wait(2)。对比仅在检测到错误条件时才设置的 $! 和 $^E,变量 $? 在每个 “wait” 或管道”close” 时都会 设置并冲掉旧值。这一行为更接近 $@,后者在每次 eval()后总是在失败时设置并在成功时清除。
更多细节请分别参见 $@、$!、$^E 和 $? 各自的说明。