`

Perl 学习笔记

    博客分类:
  • Perl
阅读更多

1.安装perl
http://www.perl.com/download.csp
下载windows版本的perl   ActivePerl

2.命令行下输入 perl -v 打印出perl版本

3.文档资料: 安装目录\Perl\html

4.注释
代码行上的 # 符号后面的一切均被视为注释行。注释是指 P e r l将对它加以
忽略的一些东西。
#!是不同的。它后面的路径名
/ u s r / b i n / p e r l是到达perl 解释程序的路径。

5.P e r l中的分号是个语句分隔符。
print "Hello,World!\n";程序行结尾处的\ n告诉P e r l将一个新的空行插入到它输出的短语的后面。短语前后的引号和 \ n告诉P e r l,这是个文字串,不是另一个函数。

6.在P e r l中,数字和字符串就是谈话的基本单位,这些基本单位称为标量。
对标量可以进行增加、减少、查询、测试、集中、清除、分隔、折叠、排序、保存、加载、输出和删除等操作。
P e r l中的标量能够代表直接量数据,它在程序的生命期内是不变的。有些编程语言将这些值称为常量或直接量。P e r l拥有两种不同类型的标量常量,它们都称为直接量。一种是数字直接量,一种是字符
串直接量。
P e r l中还有另一些类型的标量是变化的,它们称为标量变量。变量可以在你对它进行操作时用来存放数据。
P e r l拥有两种不同类型的标量常量,它们都称为直接量。一种是数字直接量,一种是字符串直接量。

7.美元符号称为类型标识符,用于告诉 P e r l该变量包含标量数据。
P e r l中的变量名,比如哈希变量、数组、文件句柄和标量,必须符合下列规则:
• 变量名可以包含字母(a至z , A至Z)字符、数字或类型标识符后面的一个下划线字符(_) 。
不过,变量名的第一个字符不能是数字。
• 变量名是区分大小写字母的。这意味着变量名中的大写和小写字母都是有特定意义的

P e r l与某些其他编程语言不同,P e r l中的标量变量在你使用它们之前,不必预先进行声明或
初始化。若要创建一个标量变量,只要使用它就行了。当使用一个未经初始化的变量时,P e r l将
使用它的默认值。如果它被用作数字时(如数学运算中的数字) ,P e r l将使用0(零)这个值;如
果它被用作字符串(几乎其他任何地方都使用) ,那么Perl将使用“ ”这个值,即空字符串。

8.特殊变量$_
P e r l拥有一个特殊变量,它的值可以用作“默认值” 。对于许多运算符和函数来说,该变
量称为$变量。

9.开关 - w告诉P e r l,只要遇到警告就通知你。
#!/usr/bin/perl -w

10.并置运算符,用圆点( .)来代表。
$a = "hello" ;
$b = " world";
$c = $a . $b ;

11.如果P e r l在双引号字符串中找到了一个变量,那么它将被内插替换。这就是说,双引号字符串中的变量名将被它的实际值代替
为了防止变量查找的字符串被内插替换,可以使用单引号(它不进行任何形式的内插替换) ,也可以在变量标识符的前面加上一个反斜杠

12.如果P e r l不能清楚地指明变量名在何处结束和字符串的其余部分从何处开始,那么可以使用花括号将变量名括起来。使用这个句法, P e r l就能够找到可能模糊的变量名
$dateday = "hello";
print "${data} world";

13.重复运算符 x。运算符x配有两个参数,一个是要重复的字符串,另一个是该字符串重复的次数
$line = "- " x 70 ;
字符-被重复70次赋给$line

14.< S T D I N >表达式从键盘读取信息,直到用户按下 E n t e r键为止。
#!/usr/bin/perl -w

print "你穿多大的鞋?";
$size = <STDIN>;
print "您的鞋的尺码是 $size";

在大多数情况下,你不希望在字符串的结尾处出现换行符。若要删除换行符,可以像下面这样使用c h o m p运算符
#!/usr/bin/perl -w

print "你穿多大的鞋?";
$size = <STDIN>;
chomp $size;
print "您的鞋的尺码是 $size,谢谢";

15.例子
#!/usr/bin/perl -w

print "每月存款金额?" ;
$pmt = <STDIN> ;
chomp $pmt ;

print "每年的利率是多少? (例如 . 7 is 0.07)" ;
$interest = <STDIN> ;
chomp $interest ;

print "存款总月数?" ;
$mons = <STDIN> ;
chomp $mons ;

# 一级方程式需要每月利息
$interest /= 12;

$total = $pmt *((1 + $interest) ** $mons -1 )/$interest ;
print "当过了$mons个月,每月利息为$interest \n";
print "您总共有 $total.\n";


/////////////////////////////程序控制//////////////////////////////

16.if语句
if()
elsif()
else

17.例子
#!/usr/bin/perl -w

$randNum = int(rand 10);
print "输入一个数字" ;
$guess = <stdin>;

chomp $guess ;
if($guess>$randNum){
 print "大了!\n";
}elsif($guess < $randNum){
 print "小了!\n";
}else{
 print "猜对了!\n";
}

18.
运算符   举例   说明
eq $s eq $t 如果$ s等于$ t,则为真
gt $s gt $t 如果$ s大于$ t,则为真
lt $s lt $t 如果$ s小于$ t,则为真
ge $s ge $t 如果$ s大于或者等于$ t,则为真
le $s le $t 如果$ s小于或者等于$ t,则为真
ne $s ne $t 如果$ s不等于$ t,则为真

19.undef这个值在Perl中是个特殊值。尚未设置的变量均拥有undef这个值,并且有些函数在
运行失败时也返回undef。

20.last语句能够使当前正在运行的最里面的循环块退出。当你拥有多个嵌套的循环语句时,l a s t将退出当前正在运行的循环。
while($i < 10){
     last if($i==5);
     $i++;
}

next语句使得控制权被重新传递给循环的顶部,如果该循环尚未结束的话,下一个循环的重复运行则开始进行

20.标号
标号名使用的约定与变量名基本相同,不过有一个很小的差别,那就是标号名不像变量,它不带%、$和@之类的标识符。
MyBlock:{
}

21.exit语句是最后的一个流控制工具。当 Perl遇到exit语句时,程序就停止执行,Perl将一个退出状态返回给操作系统。

22.例子
#!/usr/bin/perl -w

$maxprimes = 20 ;
$value = 1;
$count = 0 ;
while($count < $maxprimes){
    $value++;
    $composite = 0 ;
OUTER: for ($i=2;$i<$value;$i++){
 for($j = $i; $j < $value ; $j++){
        if(($j * $i)==$value){
  $composite = 1;
  last OUTER;
 }
        }
 }
 if(!$composite){
 $count++;
 print "$value is prime\n";
 }
}

/////////////////////////////基本构件的堆栈:列表与数组//////////////////////////////

1.列表是列表数据最简单的表示方法,它们只是一个标量的组合。由于列表是标量的集合,并且标量也可以任意大,因此列表能够存放相当多的数据。
若要将一个列表存放在一个变量中,需要一个数组变量。在Perl中,数组变量用一个符号(@)后随一个有效的变量名
数组变量可以与标量变量使用相同的名字,例如,$names与@names可以指不同的东西,$names指一个标量变量,而@names则指一个数组。

2.如果列表只包含简单的字符串,而用单引号将每个字符串括起来对你来说又太麻烦,那么Perl提供了一个快捷方式,即qw运算符。下面是使用qw的一个例子:
qw (apples oranges 45.6$x)

3.Perl有一个非常有用的能够对列表进行操作的运算符,称为范围运算符。范围运算符由一对圆点(..)来表示。下面是该运算符的用法的例子:
( 1..10 )
如果范围运算符的右边的操作数小于左边的操作数,比如(10..1) ,那么将产生一个空列表。范围运算符既可以用于字符串,也可以用于数字。

4.@copy =@origina ;
@clean = () ;
在这里,@origina数组的所有元素都被拷贝到新数组@copy中。如果@copy中原先已经拥有元素,那么这些元素就会丢失。这时 @ c l e a n就变成空数组。

5.若要获得整个数组的内容,最简单的方法是使用双引号中的数组:
print "@array";
若要访问一个元素,可以使用句法 $array[index],其中array是数组的名字,index是你想要的元素的索引。

6.Perl能够说明$trees与@trees[0]之间的差别,因为$trees[0]中有一个方括号。 Perl知道你指的是@trees的第一个元素,而根本不是指$trees。

7.Perl提供了两个机制,可以用来查找数组的结尾。第一个方法是个特殊变量,其形式是$#arrayname。它能够返回数组的最后一个有效索引的号码。
寻找数组大小的另一种方法是在期望存在标量的位置上使用数组变量:

8.也可以为数组设定负索引。负索引号从数组的结尾开始计数,然后反向递增。例如,$array[-1]是@array的最后一个元素,$array[-2]是倒数第二个元素,依次类推。

9.可以使用一个称为scalar的特殊伪函数来强制将某个东西放入标量上下文:
print sacalar (@foo);
这个例子用于输出@foo中的元素的数量。scalar函数强制@foo在一个标量上下文中进行计算,因此@foo返回@foo中的元素的数量。

10.如果chomp函数获得一个标量,那么它就从标量的结尾处删除记录分隔符。如果它获得一个数组,它将从数组中的每个标量的结尾处删除记录分隔符。

11.什么是文件结尾呢?当Perl读取来自终端的全部输入且你完成 Perl数据的输入时,你必须发出通知。为此通常键入一个 End of File(文件结束)字符(EOF) 。该字符随着你使用的操作系统的不同而各有差别。在 U N I X下,该字符通常是在一行的开头使用Ctrl + D。在MS _ DOS或者Windows系统上,该字符是在输入的任何位置两次使用Ctrl + Z。

12.localtime函数返回一个格式化很好的当前时间字符串。例如, print scalar(localtime)这个代码,它输出的结果将类似于 Thu Sep 16 23:00:06 1999。在列表上下文
中,localtime将返回能够描述当前时间的一个元素列表

13.将标量转换成数组的方法之一是使用 split函数。Split函数拥有一个模式和一个标量,并且使用该模式来分割该标量。第一个参数是该模式(这里用斜杠括起来) ,第二个参数是要分割的标量
@words = (/ /,"The quick brown fox")

14.join函数取出一个字符串和一个列表,使用该字符串将列表的各个元素组合在一起,然后返回产生的字符串。

15.Perl提供了sort函数。Sort函数将一个列表作为它的参数,并且大体上按照字母顺序对列表进行排序,然后该函数返回一个排定顺序的新列表。原始数组保持不变

16.reverse函数能够对字符串的字符进行倒序操作,返回倒序后的字符串

/////////////////////////////模 式 匹 配//////////////////////////////

1.元字符是指改变了模式匹配运行特性的那些字符。下面是元字符的列表
^ $ ( ) \ | @ [ { ? . + *

2.当你开始在P e r l中编写正则表达式时,应该知道它必须遵循几条规则。不过,规则并不多,
大多数规则在你理解它们之后才具有更大的意义。这些规则是:
• 通常情况下,模式匹配从目标字符串的左边开始,然后逐步向右边进行匹配。
• 如果并且只有当整个模式能够用于与目标字符串相匹配时,模式匹配才返回真(在任何
第6学时 模式匹配使用65 下载上下文中均如此) 。
• 目标字符串中第一个能够匹配的字符串首先进行匹配。正则表达式不会漏掉某一个能够
匹配的字符串,而去寻找另一个更远的字符串来进行匹配。
• 进行第一次最大字符数量的匹配。你的正则表达式可能迅速找到一个匹配的模式,然后
设法尽可能延伸能够匹配的字符范围。正则表达式是“贪婪的” ,也就是说,它会尽可
能多地寻找能够匹配的字符。

3.第一个元字符是圆点(.) 。在正则表达式中,圆点用于匹配除了换行符外的任何单个字符。

4.最简单的通配符是+元字符。+用于使前面的字符与后面的字符至少匹配一次,也可以任意次地进行匹配,并且仍然拥有匹配的表达式。

5.与元字符+的作用类似的是*。元字符*使得前面的字符可以进行 0次或多次匹配。换句话说,模式/ t * /可以进行任意次的匹配,但是,如果没有匹配的字符存在,这也没有问题。

6.下一个元字符是?。 元字符?用于使前面的字符进行0次或一次匹配 (但是不能超过一次) 。
元字符?与*之间的区别是:模式/ c ? o l a /可以匹配c o l a和o l a,但是不能与c c o l a匹配。多出
来的c需要进行两次匹配。模式 / c * o l a /可以匹配c o l a、o l a和c c o l a,因为c可以根据需要重复匹
配任意次,而不只是0次或一次。

7.如果对一个模式进行0次、一次或许多次匹配不能满足你的需要,那么 P e r l允许根据你需
要的具体次数为你进行匹配,方法是使用花括号 { }。花括号的格式如下:
pat{n,m}
这里的n是匹配的最小次数,m是匹配的最大次数,p a t是你试图量化匹配的字符或字符组。
可以省略n,也可以省略m,但是不能同时省略n和m。请看下面这些例子:
/ x { 5,10}/  x至少出现5次,但是不超过1 0次。

8.正则表达式中常用的一个通配符是. *。可以用它来匹配任何东西

9.当可能的匹配项之间用一个 | 字符隔开时,正则表达式中就出现了选择.可以对括号进行嵌套,使一个组中包含另一个组。

10.第一个位置通配符是插入记号( ^) 。正则表达式开头的插入记号告诉正则表达式只匹配一行开头的字符。

11.与它相对应的通配符是美元符号( $) 。正则表达式结尾处的美元符号能够使模式只匹配一行结尾的字符。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics