Typeglob 和符号表:
zjzc01:/root/perl# cat t5.pl
$a=20;
{
local ($a); ##先保存$a原先的值,新值为undef
my (@b); ##Lexical变量
$a = 10; ##改变$a的新值
@b = ("wallance","grommit");
print $a; ##打印结果位"10"
print "
";
print "@b"; ##打印结果位"wallace grommit"
print "
";
};
##代码块结束,又回到全局域中,此时只有$a 有效
print $a; ##打印出"20",原先的值
print "
";
print @b; ##打印警告信息,因为不存在全局变量@b
print "
";
zjzc01:/root/perl# perl t5.pl
10
wallance grommit
20
zjzc01:/root/perl#
zjzc01:/root/perl# cat t6.pl
open (LOG ,"<","processor.dat");
while (<LOG>) {
chomp;
print "$_ is $_
";
};
zjzc01:/root/perl# perl t6.pl
$_ is id :42343 ##雇员号
$_ is Name :E.F.Schumacher
$_ is Office Hours :Mon 3-4,Wed 9-9
$_ is Courses :HS201,SS343 ##讲授课程
zjzc01:/root/perl# cat t6.pl
open (LOG ,"<","processor.dat");
local $/=undef;
chomp;
while (<LOG>) {
print "$_ is $_
";
};
zjzc01:/root/perl# perl t6.pl
$_ is id :42343 ##雇员号
Name :E.F.Schumacher
Office Hours :Mon 3-4,Wed 9-9
Courses :HS201,SS343 ##讲授课程
变量$/ 中保存输入记录分隔符(默认为"
").
砖石操作符使用它来返回下一条记录(默认为下一行).如果你取消该变量值的定义(undef),
整个文件就会被一口气全部读进来。 为了免于保存于恢复$/的原始值,你可以像下面这样使用local操作符:
Typeglob:
我们前面提到typeglob可以被局部化(只能使用local), 还可以相互赋值。通过typeglob 赋值可以创建标示符的别名
例如:
zjzc01:/root/perl# cat t7.pl
$spud = "Wow!";
@spud = ("idaho","result");
*potato = *spud;
print "$potato is $potato
";
print "@potato is @potato
";
zjzc01:/root/perl# perl t7.pl
$potato is Wow!
@potato is idaho result
$! 返回值:
app01:/home/tomcat> cat 1.pl
unlink{'/root/1.sh'};
if ($!){print "$!","
"};
app01:/home/tomcat> perl 1.pl
No such file or directory