perl入门教程.docx

上传人:b****0 文档编号:25888905 上传时间:2023-06-16 格式:DOCX 页数:60 大小:32.93KB
下载 相关 举报
perl入门教程.docx_第1页
第1页 / 共60页
perl入门教程.docx_第2页
第2页 / 共60页
perl入门教程.docx_第3页
第3页 / 共60页
perl入门教程.docx_第4页
第4页 / 共60页
perl入门教程.docx_第5页
第5页 / 共60页
点击查看更多>>
下载资源
资源描述

perl入门教程.docx

《perl入门教程.docx》由会员分享,可在线阅读,更多相关《perl入门教程.docx(60页珍藏版)》请在冰豆网上搜索。

perl入门教程.docx

perl入门教程

第二节

(1)数字

双精度浮点型

整数浮点数

数字操作符+-*/%**

(2)字符串

Unicode和utf-8

单引号和双引号内的字符串

(3)字符串操作符

连接操作符

重复操作符

(4)数字与字符串之间的转换

Print“123”*3;Print“123s”*3;Print“123s”.3;

(5)Perl的警告信息

Use这个函数用来加载和引用Perl的模块,或者是子程序,

Usewarnings;Print“123s”*3;Print“123s”.3;

Print–wtest.pl

(6)标量变量

容器变量名称不变,存储内容改变美元符号:

$

(7)变量的命名

字母、数字和下划线全部小写

(8)变量的赋值

双目赋值操作符

(9)字符串中的标量变量内插

Print“$c“;print$c:

(10)操作符的优先级与结合性

直接括号搞定

(11)比较操作符和if控制结构While(){}

== !

=><>=<=

Eqnegtltgele

If(){}

(12)布尔值0为假其他都为真

(13)获取用户的输入

(14)Chomp()操作符如果字符串后面有两个换行符?

chomp()(perl5)会删除\n以及后面的所有内容。

chop()(perl4)会删除最后一个字符。

(15)Undef值

while($n<10){$sum=$sum+1;$n=$n+1;}print$sum;

(16)defined()函数

defined()

第三节

(1)标量:

数字字符串

单引号和双引号内的字符串

(6)标量变量

容器变量名称不变,存储内容改变美元符号:

$

(11)if控制结构While(){}

比较操作符

获取用户的输入

(14)Chomp()操作符如果字符串后面有两个换行符?

(15)Undef值

(16)defined()函数

 

标量——列表(数据)

标量变量——数组(变量)

数组内可以同时包含数字、字符、undef值

数组或列表的索引:

整数,从0开始

数组的索引不是整数?

舍去小数

超过数组尾端的元素进行赋值?

数组的长度无上限,增补的默认为undef

数组里最后一个元素的索引值:

$#aaa

这个数字比数组内元素的个数少1

负数数组索引值:

-1

数组:

@

数组的赋值

@aaa=qw,(),1..100,@bbb,(@ccc,“abc”,123)

数组的初始值:

()

变量的初始值:

undef

将一个数组复制到另外一个数组:

列表赋值,

 

访问数组中的元素:

$aaa[0]=”aaa”;

$aaa和@aaa、$aaa[0]一样吗?

列表直接量:

圆括号内逗号隔开

范围操作符:

..

数组内的元素,可以是表达式和变量

($aaa,17)($a+$b,$c+$d)

qw简写:

qw(),简洁,当成单引号qw任何标点符号作为定界符!

/#

qw内的转义字符

列表的赋值

($a,$b,$c)=(“aaa”,”bbb”,”ccc”)

互换变量($a,$b)=($b,$a)

赋值时左右两边变量的个数不相等?

 

下标超出数组的尾端?

undef值

字符串中的数组内插

数组变量可以放在双引号内,数组各元素自动添加空格分隔,首尾不会添加空格

电子邮件放进双引号内:

转义字符或单引号

 

数组操作函数:

Perl尽量少用索引,影响速度。

pop和push操作符

新增元素到数组尾端,更高的索引赋值。

pop:

取出数组最后一个元素返回

@aaa=1:

3;

$bbb=pop(@aaa);@aaa是多少?

$ccc=pop@aaa;@aaa是多少?

pop@aaa;@aaa是多少?

与Chop() ;区别

Push(@aaa,9);

Push@aaa,9;不用括号

Push@aaa,1..9;

Push@aaa,@bbb;

Pop和push的操作对象是数组,不是列表。

Shift和unshift操作符

处理最左边,最前边

$a=shift(@aaa);

$a=shift@aaa;

Unshift(@aaa,5);

Unshift@aaa,@bbb;

Splice操作符

Push-pop和shift-unshift操作首尾

Splice操作中间的元素

四个参数,后两个可选,必须有两个

第一个是目标数组,第二是开始位置

@aaa=1..5;

@bbb=splice@aaa,2;

删掉了2以后的,并返回

第三个参数:

长度,个数,不是位置

删掉一个片段

第四个参数是要替换的列表,不一定和删除的一样长

可以不删除,制定位置插入

 

列表和数组

列表是指数据,而数组是其变量名。

可以有一些值(列表)但不属于数组;但

每一个数组标量都有一个列表。

第一个元素的索引为0.

print$fred[0];

$fred[1]="test";

数组中最后一个元素的索引为$#

例如

$rocks[0]="a";

$rocks[1]="b";

$end=$#rocks;

$number_of_rocks=$end+1;

$rocks[$#rocks]="lastone";

或者用-1索引最后一个元素

$rocks[-1]="lastone";

列表

(1,2,3)

(1..100)

(5..1)空列表

qw简写:

qw(fredbarneybettywilmadino)相当于

("fred","barney","betty","wilma","dino")

除了用括号作为分界符,还可以用任何标点符号,如:

qw!

fredbarney!

qw[fredbarney]

列表赋值:

($fred,$barney,$dino)=("flintstone","rubble",undef);

可以用来交换两个变量的值

($fred,$barney)=($barney,$fred);

给列表赋值:

($rocks[0],$rocks[1])=qw/talcmica/;

或者

@rocks=qw/talcmica/;

@tiny=();#空表

@giant=1..1e5; #包含100,000个元素

@stuff=(@giant,undef,@giant);#包含200,001个元素的表

pop将数组的最后一个元素取出并返回。

@array=5..9;

$fred=pop(@array);#fred=9,@array现在为(5,6,7,8)

pop@array;#@array现在为(5,6,7),8被丢弃

push将一个元素加到数组末尾

push(@array,0);

push@array,8;

push@array,1..10;

@others=qw/90210/;

push@array,@others;

unshift和shift对一个数组的开头进行操作。

@array=qw#dinofredbarney#;

$m=shift(@array);#$m为"dino",@array为("fred","barney")

shift@array;

unshift(@array,5);

unshift@array,4; #@array为(4,5);

@others=1..3;

unshift@array,@others;#@array为(1,2,3,4,5)

数组放入双引号的字符串中,其中的数组元素会自动由空格分开。

对email应该这样定义

$email="fred\@bedrock.edu";

$fred="right";

print"thisis$fred[3]\n";

print"thisis${fred}[3]\n";

print"thisis$fred"."[3]\n";

print"thisis$fred\[3]\n";

输出

thisiswrong

thisisright[3]

thisisright[3]

thisisright[3]

foreach控制结构:

foreach$rock(qw/bedrockslatelava/){

 print"onerockis$rock.\n";

}

其中$rock是控制变量,如果修改了控制变量,那么原始列表也被修改。

在循环结束后,控制变量将恢复原来的值。

@rocks=qw/abc/;

$rock="test";

print"$rock\n";

print"@rocks\n";

foreach$rock(@rocks){

 $rock=$rock."o";

}

print"$rock\n";

print"@rocks\n";

结果为:

test

abc

test

aoboco

最常用的默认变量$_

如果在foreach中省略了控制变量,则使用默认变量$_

foreach(1..10){

 print"$_\n";

}

或者 

$_="test";

print;

reverse将列表和数组反转

@fred=6..10;

@barney=rever(@fred);

@wilma=reverse6..10;

@fred=reverse@fred;

sort排序:

大写排在小写前,数字在字符前

标量和列表上下文:

@people=qw/fredbarneybetty/;

@sorted=sort@people;   列表上下文:

barneybettyfred

$number=42+@people;  标量上下文42+3=45

又比如对于reverse,在列表上下文,反转列表;在标量上下文,反转字符串

@backwards=reverseqw/yabbadabbadoo/; 返回doo,dabba,yabba

$backwards=reverseqw/yabbadabbadoo/;返回oodabbadabbay

@wilma=undef;一个元素(undef)

@betty=();空数组,无元素

scalar将列表转成标量

print@people,scalar@people;

比如对STDIN,是标量还是列表,也不同。

对于标量,输入一行,回车,就可以

对列表,要以ctrl+z来表明结尾,回车。

@lines=;

foreach(@lines){

 print$_."\n";

}

$line=;

print$line;

读入所有行,不包含换行符

chomp(@lines=);

第四节

赋值:

@aaa=qw,(),1..100,@bbb,(@ccc,“abc”,123)

qw简写:

qw(),简洁,当成单引号

数组的初始值:

()

变量的初始值:

undef

访问:

$aaa[0]=”aaa”;

下标超出数组的尾端?

undef值

数组或列表的索引:

整数,从0开始、小数、负数、$#aaa

$aaa和@aaa、$aaa[0]一样吗?

输出:

字符串中的数组内插

数组变量可以放在双引号内,数组各元素自动添加空格分隔,首尾不会添加空格

电子邮件放进双引号内:

转义字符或单引号

 

数组操作函数:

Perl尽量少用索引,影响速度。

Pop和push

Shift和unshift操作符

Splice操作符

索引表达式

@aaa=qw(abcdefgh);

Print$aaa[0];

$b=5;$b=”2*5”;

Print$aaa[$b-1];

Foreach控制结构

Foreach$aaa(qw/aaabbbccc/){

Print$aaa.”\n”;

}

控制变量:

每次迭代,控制变量$aaa从列表中取出一个值。

循环时,控制变量就是列表中本身的值,改变它会改变列表元素的值

$a="123";

@aaa=qw(abcdefgh);

foreach$a(@aaa){

print"$a"."\n";

$a=$a.$a;

}

print"@aaa"."\n";

print"$a";

循环结束时,控制变量变回其初始值,如undef

Foreach省略控制变量:

默认$_变量

@aaa=qw(abcdefgh);

foreach(@aaa){

print"$_"."\n";

}

Reverse操作符

@aaa=1..4 ;

@bbb=reverse(@aaa) ;

赋值的时候,先算右边,再给左边

Reverse不会修改原来的数组。

@aaa=qw(abcdefgh);

@bbb=reverse(@aaa);

print"@aaa"."\n";

print"@bbb"."\n";

Sort操作符:

对字符进行排序

@aaa=(1,5,3,2,4,8);

@bbb=sort(@aaa);

print"@aaa"."\n";

print"@bbb"."\n";

each操作符,每次调用,返回数组的两个值,索引和该元素的值

($aaa,$bbb)=each@aaa

@aaa=qw(abcdefgh);

($a,$b)=each@aaa;

print"$a".""."$b"."\n";

($a,$b)=each@aaa;

print"$a".""."$b"."\n";

打印数组的索引和值

@aaa=qw(abcdefgh);

while(($a,$b)=each@aaa){

print"$a".""."$b"."\n";

}

 

@aaa=qw(abcdefgh);

$index=0;

foreach(@aaa)

{

print"$index"."".$_."\n";

$index=$index+1;

}

 

标量上下文与列表上下文:

同一表达式出现在不同的地方,会有不同的意义。

是数字还是字符,取决于操作符

是标量还是数组,取决于操作符

“12abc”*2,“12abc”.2

数组:

在列表上下文中,会返回列表。

在标量上下文中,会返回个数。

@bbb=Reverse@aaa;

$n=@aaa;

 

$bbb=Reverse@aaa;

@aaa=qw(123abc);

$a=reverse@aaa;

print"$a";

强制指定标量上下文

@aaa=qw(abcde);

printscalar@aaa;

列表上下文中的

$aaa=;

print$aaa;

@aaa=;

print"@aaa";

数组里去掉换行符

@aaa=;

chomp(@aaa);

print"@aaa";

第五节

为什么要子程序:

继承、代码重复利用、定义自己的函数。

定义子程序:

sub子程序名{}

subprint_value{

$a=$a+1;

print$a;

}

子程序可定义在程序的任意位置,不需要对子程序进行声明,子程序的定义是全局的。

子程序重名时,后面的会覆盖掉前面的。

警告会提醒。

目前为止,所有的变量都是全局的。

调用子程序:

&+子程序名

$a=10;

&print_value;

subprint_value{

$a=$a+1;

print$a;

}

 

返回值:

所有的perl都有一个返回值,最后的一个运算结果就是返回值,小心最后一行代码

$a=10;

print3*&print_value;

subprint_value{

$a=$a+1;

}

$a=10;

print3*&print_value;

subprint_value{

$a=$a+1;

print"5"."\n";

}

最后一个print,输出是1,表示成功输出。

最大值:

$value_1=10;

$value_2=5;

print&max_value;

submax_value{

if($value_1>$value_2){

$value_1

}else{

$value_2;

}

}

参数:

&max_value(10,25)

特殊的数组变量:

@_,

第一个参数$_[0],第二个参数$_[1],(与$_无关,$aaa与$aaa[0]区别?

print&max_value(10,25);

submax_value{

if($_[0]>$_[1]){

$_[0]

}else{

$_[1];

}

}

print&max_value(10,25,100);

print&max_value(10);

私有变量:

@_

子程序的私有变量:

防止和其他变量冲突

print&max_value(10,25);

submax_value{

my($a,$b);

($a,$b)=@_;

if($a>$b){$a;}else{$b;}

}

my($a,$b)=@_;子程序第一行,命名和赋值

 

变长参数列表:

print&max_value(10,25,100);

submax_value{

if(@_!

=2){print"warning";}else{

my($a,$b)=@_;

if($a>$b){

$a;

}else{

$b;

}

}

}

print&max_value(10,25,100,1,1000);

submax_value{

my($a)=shift@_;

foreach(@_){

if($_>$a){$a=$_;}

}

$a;}

空参数列表

my变量的其他用法:

用在程序里,封装变量,防止出错。

my($a)=@_;

my$a=@_;

@a=(1,2,3,4,5);

my($a)=@a;

print"$a"."\n";

my$a=@a;

print"$a"."\n";

my$a,$b;

my($a,$b);

my@a;

foreachmy$a(@aaa){}

usestrict编译命令

usestrict;

@a=(1,2,3,4,5);

my($a)=@a;

print"$a"."\n";

my$a=@a;

print"$a"."\n";

新变量必须用my

usestrict;

my$ab=1;

$a_b=$ab+1;

print$ab;

return操作符:

程序停止并返回值

usestrict;

my@name=qw(chydttzxlyzjwy);

my$output=&find_name("wyy",@name);

print$output;

subfind_name{

my($input,@name_list)=@_;

foreach(@name_list){

if($inputeq$_){return$input;}

}

return"no";

}

省略与号:

不要把定义子程序放在调用语句的后面

防止与内置的函数重名

非标量返回值,子程序可以返回数组

usestrict;

print&return_array(1,5);

subreturn_array{

my($a,$b)=@_;

if($a<$b){return$a..$b;}

}

持久性私有变量:

state

usestrict;

use5.010;

subreturn_array{

state$n=0;

$n=$n+1;

print$n;

}

&return_array;

&return_array;

第六节

为什么要子程序:

继承、代码重复利用、定义自己的函数。

定义子程序:

sub子程序名{}

subprint_value{

$a=$a+1;

print$a;

}

调用子程序:

&+子程序名

返回值:

所有的perl都有一个返回值,最后的一个运算结果就是返回值,小心最后一行代码

最后一个print,输出是1,表示成功输出。

参数:

&max_value(10,25)

特殊的数组变量:

@_,

第一个参数$_[0],第二个参数$_[1]

变长参数列表:

空参数列表

 

子程序的私有变量:

防止和其他变量冲突

my($a,$b)=@_;子程序第一行,命名和赋值

my变量的其他用法:

用在程序里,封装变量,防止出错。

my($a)=@_;my$a=@_;

@a=(1,2,3,4,5);

my($a)=@a;

print"$a"."\n";

my$a=@a;

print"$a"."\n";

usestrict编译命令

usestrict;

@a=(1,2,3,4,5);

my($a)=@a;

print"$a"."\n";

my$a=@a;

print"$a"."\n";

新变量必须用my

usestrict;

my$ab=1;

$a_b=$ab+1;

print$ab;

return操作符:

程序停止并返回值

usestrict;

my@name=qw(chydttzxlyzjwy);

my$output=&find_name("wyy",@name);

print$output;

subfind_name{

my($input,@name_list)=@_;

foreach(@name_list){

if($inputeq$_){return$input;}

}

return"no";

}

省略与号:

不要把定义子程序放在调用语句的后面

防止与内置的函数重名

非标量返回值,子程序可以返回数组

usestrict;

print&return_array(1,5);

subreturn_array{

my($a,$b)=@_;

if($a<$b){return$a..$b;}

}

持久性私有变量:

state

usestrict;

use5.010;

subreturn_array{

state$n=0;

$n=$n+1;

print$n;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 电力水利

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1