文件句柄:
程序里代表perl进程与外界之间的I/O联系的名称,他是这种“联系”的名称,并不是文件名称。
6个文件句柄是预留的,叫STDIN,STDOUT,STDERR,DATA,ARGV和ARGVOUT
Larry建议所有的文件句柄命名时都用大写字母
STDIN表示perl进程与它的输入源之间的联系,即标准输入流
die函数:
die函数会输出你写的信息到标准错误流中,然后让你的程序立刻终止并返回不为0的状态的错误码
$!表示什么?表示可读的系统错误信息
如果open失败,die会终止程序的执行,$!只能表示有系统服务请求时候的错误信息,不能是用户程序级别的。因为那个时候$!是无法捕捉到的。
if(!open LOG,'>>','logfile')
{
die "I can't open the file:$!";
}
say函数会自动添加换行符
如:
#!/usr/bin/perl -w
use strict;
use 5.010;
my $name="zhang";
print "$name\n";
print "$name","\n";
say $name;
为say指定一个文件句柄:
#!/usr/bin/perl -w
use strict;
use 5.010;
say BEDROCK "hello";
哈希:
哈希中键和值是任意的标量,其中键都会被转化为字符串。
其中键必须是唯一的字符串,值可以重复
访问和赋值哈希值:$hash{$some_key}
注意:使用的是大括号,而不是方括号
指代整个哈希:使用%,如%family_name
展开哈希:@array=%some_hash
这是一个简单的键值对列表,得到的顺序不一定是原来的,因为perl会为了检索的快速重新对其排序,所以使用hash的场合不应该对顺序有很严格的要求,至少可以很方便的再排序。
哈希复制:
my %new_hash=%old_hash
这个在实际中少用,因为perl要做的东西很多,大致上它会先将old_hash转化成列表,然后将列表元素构造键值对,然后形成新的new_hash
my %reverse_hash=reverse %any_hash
翻转哈希表,先将其转化为列表(key,value,key,...),然后翻转列表为(value,...),现在我们能够按照“值”找到“键”了。但注意这样的话表明原来的值对于也不应该是有重复的,因为这样的话翻转之后就会出问题。
胖箭头:
其实在perl中任何使用逗号分割的都可以替换成胖箭头
my %last_name=(
'fred'=>"flinstone",
'dino'=>undef,
'barney'=>'rubble',
)
无需引号的字符序列,称为裸字,它可以独立存在并且不加引号没有歧义。
注意:如果不是裸字,就会被作为表达式计算然后结果作为键。
#!/usr/bin/perl -w
use strict;
use 5.010;
my %hash=(
'a'=>1,
'b'=>'c',
'c'=>3
);
print %hash,"\n";
print keys %hash,"\n";
print values %hash,"\n";
如上可以打印出相应的key值和value值
each函数:
#!/usr/bin/perl -w
use strict;
use 5.010;
my ($key,$value);
my %hash=(
'a'=>1,
'd'=>2,
'hello'=>'zhang'
);
while(($key,$value)=each %hash)
{
print "$key=>$value\n";
}
注意:$key,$value声明时要放在一起,不能这样写:my $key,$value;另外while怎么结束呢:该条件返回的是列表数量的个数,所以直到0的时候就会结束。
exists函数:
判断键是否存在,存在则返回真,否则返回假。无需关心键值
delete函数:
删除哈希中的键以及对应的键值,当键不存在时就直接结束而不发生任何错误提示。注意这与定义了一个哈希元素的值为undef的情况不同,至少两者的exists函数结果不同。undef时结果为真。
%ENV哈希:
#!/usr/bin/perl -w use strict; use 5.010; print "$ENV{'PATH'}"; 结果与操作系统相关。