Perl中有很多特殊的内置变量,有时候能够简单地使用这些变量,会出现意想不到的效果!但尽量不要更改Perl的内置变量,除非它被本地化在一个代码段中(local{...})。
常见的内置变量有
$_在很多地方用作默认参数,
@_和@ARGV是函数传入的参数的集合,
@INC包含了perl解释器中指定的标准路径名,即use和require给定的文件目录。
use lib '/my/dir';
可在程序中指定 BEGIN { push @INC, '/my/dir' }
除此之外,有一些其他非常好用的内置变量
1. $. 跟踪当前行号。
2. $/ 输入记录分隔符。
如果使用文件输入操作符<FILE>从一个文件中一次读入一行数据,而每一行都包含一个字符“\n”,这个“\n”其实就是“$/”指定的文件输入分隔符。
如有以下内容:
This is the line A
%%
This is the line B
%%
This is the line C
每行是被%%隔开,那么如果想一次读入一段引文,则可暂时修改"$/"的默认值。如下:
$tmp = $/;
$/ = "%%\n";
while (<FILE>){
chomp;
print;
}
$/ = $tmp;
同样,使用chomp则会删除"$/"中指定的分隔符了。
还有一种用法:如
open (HTML_FILE, "< $link") || die "Can't open file for reading: $!";
my $html_file = do { local $/=undef; <HTML_FILE>};
close (HTML_FILE);
3. $\ 输出记录分隔符。
即包含了每次调用print输出时候,在其最后要增加的字符串。当然默认是空。可以这样用:
sub pringln{
local $\ = "\n";# 此处即使用代码块的本地变量
print @_;
}
4. $, 保持了print输出的一组参数之间的分隔符。默认是 “,” 如
my @arr = (1,2,3);
{
local $, = ',';
print @arr;#输出 1,2,3
}
5. $" 当一个数组被双引号包含传递给print时,展开该数组后用来分隔元素的字符。
my @arr = (1,2,3);
{
local $" = '+';
print "@arr";#输出1+2+3
}
同样,hash中也可以用
my %hash=(one=>1,two=>2,three=>3);
{
local $" = '<';
print "@hash{qw(one two three)}";#输出1<2<3
}
6. <*>
my @dir = <*>;#把当前文件夹下所有文件的名字赋值给数组@dir
my $dd = <*>;#把文件夹下第一个文件的名字赋值给$dd