perl入门笔记(五)

来源:互联网 发布:js 获取元素当前位置 编辑:程序博客网 时间:2024/06/10 20:13

文件句柄:

程序里代表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,...),然后翻转列表为(value,key,value,key,...),现在我们能够按照“值”找到“键”了。但注意这样的话表明原来的值对于也不应该是有重复的,因为这样的话翻转之后就会出问题。

胖箭头:

其实在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,
'b'=>'c',
'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'}";
结果与操作系统相关。

0 0
原创粉丝点击