2 min read

Perl复习

骆驼书是去年看的了,最近在做的项目中,爬虫基本上是用Perl写的。趁着这个机会,复习一下Perl——因为基本上已经不记得Perl该怎么写了……

#冷知识

##骆驼书

说到骆驼书,Perl的版本号升到4,不是因为语言有什么重大改变,纯粹是由于这本书的出版。语言之父出书的待遇就是不一样啊。

##名称

文档中明说“PERL”是不对的1

有些地方将名称视为“Practical Extraction and Report Language”的缩写,沃尔自己也曾开玩笑说这是“Pathologically Eclectic Rubbish Lister”。好吧,喜欢缩写文字游戏真是程序员一个奇怪的爱好。Silicon Valley里面一上来就黑了。

##标志 Programming Perl的封面是骆驼,所以骆驼成了吉祥物。其实……羊驼也是Perl的吉祥物。因为Intermediate Perl的封面是一只羊驼……另外,洋葱也是Perl的标志。

##思想 Perl的中心思想:

There’s More Than One Way To Do It.

缩写就是“TMTOWTDI”——沃尔说这个词可以念成”Tim Toady”。无聊的程序员啊。 这句话后来被扩充成:

There’s more than one way to do it, but sometimes consistency is not a bad thing either.

怎么有种承认打脸的感觉……另外缩写TMTOWTDIBSCINABTE发音就成了“Tim Toady Bicarbonate”。这孩子又多了个姓。你们程序员真是太无聊了……

还有句谚语:

Easy things should be easy, and hard things should be possible.

##优点 在统一变量类型和掩盖运算细节方面,Perl做得比Python更为出色。

##缺点 一直有着write-only的“美誉”。

#语法 ##变量 Perl是一种无类型语言。只有一种能接受各种类型数据的“无类型”变量。

标量(Scalar,$)以外,Perl还有数组(Array,@)和关联数组(Hash,%)两种集合类型。

另外,Perl还有一种特殊的类型,引用(reference),类似于指针,当作标量处理,可以指向任何类型。

$foo = \$bar; print $$foo;
$foo = \@bar; print @$foo;
$foo = \%bar; print %$foo;
$foo = \&bar; print $foo->(); print &$foo;

引用的好处在于,传递后依然可以修改指向的变量。

sub foo {
	my $var = shift;
	$$var = '1';
}
my $foo = '2';
my $var = \$foo;
print $$var;
foo ($var);
print $foo;
#21

##判断语句 *if区块

*if语句

*unless区块

*unless语句

*given/when(语句及区块)

use 5.010;
given ($foo) {
	say 'a' when 'a';
	when (/b/) { say 'b'; } #when可以写成语句或区块
	default { say 'not match'; } #只可以写成区块
}

也有不用关键字的判断语句,例如常用的打开文件语句:

open DATA, '<', $filename or die "Can't open $filename:$!\n";

##循环语句 *for/foreach

*while

*do…while

*until

*do…until

*map函数

map { print "$_\n" } @group;

##函数 //Todo