Perl学习笔记(一)

Perl学习笔记(一)
作为一个合格的架构师,不了解好的脚本语言,是一处不小的硬伤,所以我要补课!

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中,-(连接号)代表标准输入流。

 

 

你可能感兴趣的:(Perl学习笔记(一))