perl 被设计为90%处理文本,10%针对其它情况。
在Perl内部,没有整型,全当双精度浮点型来处理。
双引号字符串内会变量内插
字符串可用“.”操作符连接。
字符串重复操作符“x”,可将左边的字符串重复多少次,如"f"x3 # "fff"
变量的名字由“$”开头,后接变量名。
用户输入用<STDIN>
chomp函数,去掉字符串尾的换行符。chomp是一个函数,作为函数,它有一个返回值。$b=chomp <STDIN>; #返回值是1。
在perl中,()通常可以省略。
undef值:Perl程序员在使用新变量时,经常不初始化,从而将变量作为0或空串使用。要分辨是undef还是真正的空串,可以用defined函数,它将在undef时返回false,其余返回true。如果想自己声明undef值,可以使用undef:,如:
$a=undef;
(1..100),这种定义方式包含100个整数的列表。“..”是range oprator。
在Perl中,字符串列表会经常使用,有一种简便的方法可以不用输入大量的引号,而达到类似的功能,那就是使用qw。如:
qw(abc abcd abcde abcdef) #同("abc","abcd","abcde","abcdef")
qw表示quoted words或者“quoted by whitespace”。Perl将它们当作单引号字符串处理,不能像双引号那样在qw中使用\n和$var。
Perl中还允许用任何符号来作为分界符,如下,也一样:
qw! fred barney betty wilma dino !
qw# fred barney betty wilma dino #
qw( fred barney betty wilma dino )
qw{ fred barney betty wilma dino }
qw[ fred barney betty wilma dino ]
qw< fred barney betty wilma dino >
列表赋值:($fred, $barney, $dino) = (“flintstone”, “rubble”, undef);
变量交换(swap函数,很方便也很邪乎):
($fred, $barney) = ($barney, $fred) #交换两个变量
($betty[0],$betty[1]) = ($betty[1],$betty[0]);
数组不能成为列表的一个元素的原因是数组只能包含标量值,不能包含其它的数组。
@copy = @quarry;#将一个数组的值拷贝到另一个数组中
push的第一个参数或者pop的唯一参数必须是数组变量。他们对数组的结尾进行操作。
shift和unshift对一个数组的开头进行操作。
和标量类似,数组也可以插入双引号的字符串中,插入的数组元素会自动由空格分开。
Perl最常用的默认变量:$_,如下例:
$_ ="Yabba dabba doo\n"
print;
reverse函数会返回逆转的列表,它不会改变其参数的值,所以如果返回值没有赋值给某个变量,那这样操作是没有什么意义的。sort函数也一样。
一个给定的表达式在不同的上下文中其含义是不同的。
如:一个数组的“name”,在列表上下文中,它返回列表元素,在标量上下文中,它返回数组元素的个数。
数组@people的真实名字是people。@只是一个限定词(qualifier)。
甚至普通的赋值也产生不同的上下文:
@people = qw( fred barney betty );
@list=@people; #3个people的列表
$n=@people; #数字3
可以用scalar函数在上下文中将列表转换为标量。如:
@rocks = qw(talc quartz jade obsidian);
print "I have ", scalar @rocks, "rocks!\n"
文件结束符:*nix系统中用Ctrl+D,在DOS中,用Ctrl+Z。
定义一个子程序的方式如下:
sub marine {
$n + = 1;
print "Hello, sailor number $n!\n";
}
如果两个子程序同名,则后一个将覆盖前一个。
可以使用子程序的名字(带有&)来调用子程序。
将参数传递给子程序中的方法是,在程序后面接括号,括号内存放参数列表。
在Perl中,会自动将参数列表自动存放在一个叫做@_的数组中。也就是说此子程序参数的第一个值存放在$_[0]中,第二个存放在$_[1]中,依次类推。
可以任意时候使用my创建私有变量。如:
sub max {
my($m,$n);
($m,$n) = @_; #可以这样写,将声明和赋值放一起:my($m,$n)=@_;
if($m > $n) {
$m
} else{
$n
}
}
在调用Perl的函数时,可以省略&,但函数的定义必须在调用之前。如果子程序和Perl一个内嵌程序同名,则必须使用&来调用它。
while (defined($line = <STDIN>)) {
print "I saw $line";
}
使用defined来检测输入是否结束。
<>(尖括号操作符)是一种特殊的行输入操作。
在Unix中,-(连接号)代表标准输入流。