perl小结

以下纯属个人学习总结,如有问题或疑问请指出

perl语言学习总结:

1.获取用户输入

$line = <STDIN>;

if($line eq "/n"){

 print "你按下了回车";

}else{

 print "你没有按下回车";

}

2.去除换行符

$text = "a line of text/n";

chomp($text);

3.while控制结构

$count = 0;

while($count<10){

$count += 2;

print "count is now $count/n";# 2 4 6 8 10

}

4.如何定义一个数组以及怎么访问数组中的元素

@fred = ("11","22","33","44","55");

print $fred[0];#控制台打印11

$count = 0 ; 

while($count<$#fred+1){#  $#fred 获取数组的索引  

 print "$fred[$count],";//#  控制台打印 11,22,33,44,

 $count++;

}

5.列表直接量

("11","22","33","44");

6.pop和push操作符

pop 获取数组中的最后一个元素

@array = 5..9;

$fred = pop(@array);# 在控制台打印的是9

push 添加一个元素(或是一串元素)到数组的尾端

push(@array , 0); # @array 现在是5,6,7,8,9,0

7.shift和unshift操作符,shift与unshift操作符是对数组的"开头"或"结尾"进行相应的操作

@array = qw# hello word #;

$m = shift(@array); # $m 变成"hello",@array 现在是("word")

unshift(@array,"hello"); # @array 现在是("hello","word")

8.字符串的数组内插

@rocks = qw{hello word};

print "my first @rocks";

9.foreach 控制结构

foreach $example (qw/ hello word /){

 print "$example/n";

}

10.perl 中的$_ 使用  术语:perl的 老地方

foreach(1..10){

 print "$_";

}

11.reverse 操作符, 该操作符会读取列表的值(可能来自数组),并按相反的次序返回该列表

@array = 1..5;

print reverse(@array);

12.sort 操作符的使用,将数组进行相应的排序

@array = ("dd","aa","cc","bb");

print sort(@array); # 控制台输出 aa bb cc dd

13.标题上下文与列表上下文

@array = ("aa","bb","cc");

@list = @array; 

print @list; # 控制台输出 aa bb cc 列表赋值

$n = 1+@array;

print $n; # 控制台输出4  标量赋值

14.强制指定标量上下文

@rocks = qw(hello word);

print @rocks;

print scalar(@rocks);

15.子程序(就象java中的方法)

#创建

sub xx(){

 $_[0]+$_[1];

}

#调用 

$number = &xx(1,2);

print $number; # 控制台输出3

16.子程序中的私有变量

sub max(){

 my($m,$n) = @_;# 将保存在@_中的参数赋值给具体的变量

 if($m>$n){

  $m

 }else{

  $n  

 }

}

17.长度可变的参数列表

sub max(){

 if(@_ != 2){

  print "你传入的参数个数不正确!";

 }

 my($m,$n) = @_;# 将保存在@_中的参数赋值给具体的变量

 if($m>$n){

  $m

 }else{

  $n  

 }

}

18.更好的&max 子程序,可以让它能接受任意数目的参数

sub max(){

 my($max_so_far) = shift(@_);# 数组中的第一个值,暂时把它当成最大值

 foreach(@_){# 遍历数组 @_中的其他元素

  if($_ > $max_so_far){# 看看是否当前的元素比$max_so_far大?

   $max_so_far = $_; 

  }

 }

 $max_so_far;

}

#上面的程序使用了"高水线"的算法

print max(1,6,21,32);# 32

19.关于词法(my) 变量

my $aa,$bb;# $bb 没有声名

my($aa,$bb);# 正确

my @cc # 也可以声名私有数组

20. use strict

个人感觉没有什么太大用途

21.return 的使用

my @names = ("aa","bb","cc","dd","ee");

my $value = &which_element_is("cc",@names);

print $value;

sub which_element_is{

 my($what,@list)=@_;

 foreach(0..$#list){

  if($what eq @list[$_]){

   return $_;

  }

 }

 -1;# 这里也可以写成-1

}

 

其他控制结构

1.unless控制结构:他与if中的条件刚好相反if(true){....} unless(false){....}

2.Until 控制结构:他与while中的条件刚好相反while(true){....} Until(false){.....}

3.条件修饰词:print "$n is a negative number./n" if $n < 0 相当于if($n < 0){print "$n is a negative number./n"}

4.last操作符,相当于java中的break

5.next操作符,相当于java中的continue

6.redo操作符,它能将控制返回到本次环的顶端,不经过任何条件测试,也不会进入下一次循环迭代

哈唏  {} 哈唏必须以花括号进行处理

1. $hash{"xx"} = "xxx";# 给xx这个哈唏进行赋值

print $hash{"xx"};# 输出xxx

2. %hash=("a"=>1,"b"=>2,"c"=>3);#这是一个哈唏列表,a,b,c 都是key ,而1,2,3则是值

print %hash;#输出a1b2c3.这里的输出不一定是这种顺序的,因为哈唏出来的值是无序的

3. keys 和 values 函数

my %hash = ("a"=>1,"b"=>2,"c"=>3);

my @key = keys(%hash);# 输出abc

my @value = values(%hash);# 输出123

print @key , @value;

4.each函数 罗列哈唏的每个键/值对

while(($key , $value) = each %hash){

 print "$key => $value/n";

}

5.exists函数  检查哈希中是否有某个键

if(exists $hash{"a"}){

 print "这个hash中有这个键";

}

6.delete 函数 从哈希中删除指定的键及其相对应的值,假如没有这个键  也不会出现任何警告或错误信息

delete $hash{"a"};

正则表达式:正则表达式,在perl中常常叫做模式,是一个匹配某字符串的模板

1. $_ = "hello world";

if(/llo/){#查看llo在整个标量中是否存在

 print "";

}

2.关于元字符

点号 .   /wyl.xx/ # 说明wyl 任意字符(必须是一个字符) xx

星号(量词) * /wyl*xx/ # 说明wyl 任意字符(可以有任意多个字符) xx

点星.*  捡破烂模式

加号(量词) + /wyl +xx/ # 说明wyl 空格(必须要有一个的空格才行?) xx  如果是wylxx 这样不满足条件的

问号(量词) ? /wyl?xx/ # 之间也可以有字符也可以没有字符

圆括号 () /(wyl)+/ # 他会匹配wylwylwyl这种字符串

/1 /2 /3 反向引用  $_ = "abba";if(/a(.)/1/){print "true";}#输出true

或符号 | 择一匹配  $_ = "wyl and wxs"; if(/wyl and|or wxs/){print "true";}#输出true

字符集 是指一串可能出现的字符集合,通过写在方括号[]内来表示.它只匹配单个字符,但可以是字符集里列出的任何一个.

第一个经典的字符集  [a-zA-Z] :这个字符集可以匹配52个字母中的任何一个

[abcwxyz] 会匹配这7个字符中的任何一个。

脱字符 (^)   [^abc] 会匹配这三个字符(包含这三个字符)以外的任何字符. [^n/-z] 则匹配n 、连字符与z以外的任何字符

字符集简写

[0-9] 可以简写成/d

[A-Za-z0-9_] 可以简写成/w

/s 简写擅长处理空白,它相当于[/f/t/n/r]  比较常见的做法是使用/s*来匹配任意数目的空白(也包括零个空白),或用/s+来匹配一个以上的空白字符

/h 简写能匹配横向空白,其实就是一个包含制表符和空格的字符集[/t ]

/v 这个简写用来匹配纵向的空格,其实也就是写[/f/n/r]的快捷方式

/r 简写能匹配任何类型的断行,这给跨操作系统的断行匹配带来了便利,因为/r知道各种风格的断行方式.

[/d/D] 表示任何数字或非数字

 

以正则表达式进行匹配

1. 以m//进行匹配

m// 就是前面的/xxx/ 的简写。向 / / 符号就是定界符. 还有其它的如:m(xxx),m<xxx>,m{xxx},m[xxx] 等等

这里有个简写:如果你选择双斜线作为定界符,那么你可以省略开头的m。因为perl程序员们喜欢省略多余的字符,所以大部分的模式匹配都会以双斜线来编写,就象/xxx/这样。

常见的定界符是花括号。在程序员专用的编辑器里,可能会具有从左花括号跳到相应右花括号的功能,这在维护上有很大的帮助。

2.可选修饰符

定义:这是一些可有可无的修饰字符,有时候称为开头。它们可以成组附加在某个正则表达式结尾的定界符的右边,并改变正则表达式的默认行为。

用/i 来进行大小写无关的匹配

chomp($_=<STDIN>);

if(/yes/i){

 print "true";#  如果你输入YES,控制台也会打印true 

}

用/s来匹配任意字符 

$_="how are you/nwang yl";

if(/are.*yl/s){

 print "yes true";# 控制台会打印yes true

}

用/x加入空白

这个修饰符能够在模式里面随意加上空白,目的是使它更容易阅读、理解。

/-?/d+/.?/d*/ # 都挤在一起,很难看清是什么意思

/ -? /d+ /.? /d* /x # 加入空白后,稍微清楚些

组合选项修饰符

如果在一个模式中使用多个修饰符,可将它们连在一起使用。它们之间的先后顺序并不会影响匹配的结果:

if(/xx/is){# 同时使用 /i 和 /s

}

# 可以进行注释

$_="how are you/nwang yl";

if(

 m{

  are # 这是一个数量词

  .* # 之间的任何东西

  yl # 随便写的

 }sx #匹配任意字符

){

 print "yes true";

}

锚位

锚位:默认情况下,模式匹配的过程开始于待匹配字符串的开头,如果不相符就往字符串后面浮动,看其它位置能否匹配。但是加入一些锚位,可以让模式直接匹配字符串的某处。

^ 脱字符 是一个锚位 用来标示字符串的开头,

$ 也是一个锚位,用来标示字符串的结尾

单词锚位

锚位并不局限于字符串的首尾。比如/b是单词边界锚位,它匹配任何单词的首尾。

//bwangyl/b/  它只能匹配 wangyl     而不能匹配wangylhowareyou

这里所说的单词并不是一般的英文单词,而是由一组/w字符构成的字符集,也就是由普通英文字母、数字与下划线组成的单词。/b 锚位匹配的是一组/w字符的开头或结尾。

单词边界锚位非常有用,它保证我们不会意外地在delicatessen中找cat、在boondoggle中找到dog或在selfishness中找到fish。有时候、你只会用到一个单词边界锚位、像用//b/来匹配hunt、hunting或hunter,而排除了shunt;或是用/stone/b/ 来匹配standstone事flintstone,但不包括capstones。

非单词边界锚位是/B,它能匹配所有/b不能匹配的位置。

因此,模式//bsearch/B/会匹配searches、searching与searched,但不匹配search或researching。

绑定操作符

默认的情况下模式匹配的对象$_,绑定操作符=~ 则能让perl拿右边的模式来匹配左边的字符串,而非匹配$_。相当于java中的==  equal()

实例:

my $some_other = "hello wangyl , how are you.";

if($some_other =~ //byo/){

 print "true";#控制台输出true;因为$some_other 中包含yo

}

模式串中的内插

 $what = "sky";

while(<>){

 if(/^($what)/){

  print "$what of $_";#当输入sky  则在控制台输出sky of sky

 }

}

捕获变量  看的我有点头晕

字符串操作与排序

用index进行搜索字符串

my $stuff = "hello world!";

my $where = index($stuff,"word");#控制台输出6

my $where = index($stuff,"word",2);# 这里的2的意思是从第二个字符开始搜索,这样会提高搜索效率。

用rindex进行匹配最后一次出现一个字符的位置

my $stuff = "hello world!";

my $where = rindex($stuff,"d");#输出10

my $where = rindex($stuff,"d",2);# 这里的2的意思是从第二个字符开始搜索,这样会提高搜索效率。

用substr处理子串

语法:

$part = substr($string,$initial_position,$length);

它需要三个参数:一个字符串、一个从零起算的起始位置(类似index的返回值)以及子串的长度。找到的子串会被返回。

my $xx = substr("hello wangyl",6,5);#wangy

my $xx = substr("hello wangyl",6);#wangyl

my $xx = substr("hello wangyl",6,50000);#wangyl

my $xx = substr("hello wangyl",-3,2);#gy

my $xx = substr("hello wangyl",-3,2000);#gyl

sprintf 进行相应的格式化

my $money = sprintf "%.2f", 2.49997;#2.50

目标操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值