【perl】perl教程学习笔记

语法

  一.数据类型(Data type)

Perl 的数据类型大致分为四种:Scalar(变量)、Scalar Array(数组)、Hash Array(散列)、References(指针)

1 Scalar(纯量变量):

# 纯量变数以$开头。
# my 是一种宣告变量的方式,它可以使变量区域化。
# 宣告变量时若不加 my 或 local 则Perl会把它当作全域变量使用。、

my $x="abc";   #perl语言和C语言一样,末尾要加分号
my $x=123;  

 

1-1 常用的操作运算符

1)、算术运算符 :加减乘除,幂(**),负(-)

2)、数字比较运算符

     < > <= >= != ==

3).字符串比较运算符

   lt(lower than=小于)  gt(greater than=大于)  eq,le(lower or equal=小于或者等于),ge(大于或者等于),ne(等于),

cmp(比较)  

   print($str1 cmp $str2); #print函数使用方法,需要加括号,后面要加分号

4)字符串的连接,重复

   连接 ("."):a.b,  $a = 'a'.'b'; print ($a.$b) or print ($a$b)

   重复("x"): a x 4 =aaaa; x前后要有空格,后面是数字,代表重复几次 

                "love" x3 = lovelovelove

5)逻辑运算,位运算

9)、逗号(相当于:将两条语句写在一行)
适用范围: 只有当两个语句关联紧密时才使用
例如:$a+=1,$b=$a;  => $a+=1; $b=$a;
例如:$a="ab5c", print $a."\n";

2 ScalarArray(数组变量):

  #用@开头,#var=(1,2,3);

  #打印时候:print(@var,"\n")或者 print("@var\n");

  #可以用省略号:@var=(1,2...5} = {1,2,3,4,5).(4.5..1.6)=() #因为他们之间没有显著的递增的关系,所以起始是无效数组,空数组

  #数组赋值:@array = ($var1,$var2,$var3)

                   @array=<STDIN> ->由键盘输入,$var1 =<STDIN> 

  #数组长度获得: $var1 = @array -> var1中的结果是array的长度

@array=(1,2,3);

$scalar=@array;#$scalar=3,即@array的长度

($scalar)=@array;#$scalar=1,即@array第一个元素的值 ##这一条注意

perl中循环的写法:
 
  @array = (1,2,3...6);
  $count = 0;
  while($count <=@array)
{
    print("element $count:@array[$count]\n");
    $count +=1;
}

    #数组的子数组:subarray

        @array =(1,2,3,4,5); @subarray = @array[0,2] -> @subarray = (1,2,3)

    #数组中元素的交换:可以不用中介,直接进行

           @array[0,1]=@array[3,4] ->@array = (4,5,3,4,5)

   #数组中的一些函数:sort,chop,reverse,join,split

         ->sort:按照字符的大小排序

                 sort(@array), 

               @array = (80,100,2),sort(@array)=(100,2,80) ##注意不是按照数字的大小排序的。

         ->chop:将键盘输入时候末尾的字符(换行符)去掉,如果是用于数组,就每个元素的最后一个字符去掉

               @array=("my","love","children"),chop(@array), @array = ("m","lov","childre")

         ->reverse:倒转字符串

         ->join:字符串连接 $string = join(" ","this","is","string")->用第一个位置的空格,连接后面的内容->$string = "this is string"

                       @list = ("word","like"), $sting =join(" ","this","am",@list) ->$sting = "this am word like"

          ->split:字符串劈分,劈分后应该得到数组   $sting = "this am word like", @array = split(/ /,$string)->@array = ("this","am","word","like")

3 Hash Array(哈希表):

           ->初始化:%h = {} , 或者 %h = (a=>1,b=>2) 或者 %h=('a'=>1,'b'=>2)

           ->取值: print(%h{a})--->打印出1, 删除值:delete(%h{a})  

                   清空hash:undef %h   判断是否存在某key: exists($h{$key})

           ->遍历:@all_keys = keys %h; 如下,可以调整value的值的顺序,得到所有的key值

                   # 所有键值,是按hash的值从大往小排列的。值的比较是数字比较(比如说,10>9)
                   @all_keys = sort{$h{$b}<=>$h{$a}} (keys %h);
                    # 所有键值,是按hash的值从小往大排列的。值的比较是数字比较
                       @all_keys = sort{$h{$a}<=>$h{$b}} (keys %h);
                      # 所有键值,是按hash的值从小往大排列的。值的比较是字符串比较(比如说,'10' < '9')
                        @all_keys = sort{$h{$a} cmp $h{$b}} (keys %h);

          

遍历一个hash
while(my($k,$v) = each %h)
{
    print("$k--->$v\n");
}

 4. 控制结构

         if 。。。else

         for循环的特殊形式  :foreach (@array)

         next if ...  如果后面的条件满足,则跳过当前循环余下的东西,直接执行下一轮循环

         last if ...   如果后面的条件满足,则退出整个循环

               next if index <start;

               last if index > end;

5.函数

      #函数的定义:sub fun{ code }

      #函数的调用:&fun(para1,para2)

      #参数传递:@_[0] = 第一个参数  @_[1]=第二个参数,所有参数在@_中。

      #使用参数:shift @_或者直接 shift,代表将参数的第一个值弹出

写一个函数,比较一组数中的最大值

my $maxvalue = &max(11,22,33);
print "maxvalue = $maxvalue\n";

sub max{
my $currentMaxCnt = shift @_; #得到当前参数列表
foreach(@_){
if(currentMaxCnt <$_)
{
currentMaxCnt = $_;
}
}

 

6.输入与输出

         #open(FH,"filename") --->

         #open(FH,"+filename") -->打开文件,作为读的

        #open(FH,">filename")---->打开文件,作为写的

         #open(FH,"+>filename")--->打开文件,又读写

         #open(FH,">>filename")--->打开文件,追加

         #open(FH,"-")

         #open(FH,">-")

         #open(FILE,"filename") || die("can not open $filename:$!\n");   

         #close(FILE)

         #  $input = <STDIN>; chomp $input

       

7.常用函数

* pop, push, shift, unshift, reverse - list的操作函数
* keys,values, exists, each, delete - hash的操作函数
* chomp, split, join, index, substr, sort - 字符串操作函数
* sprintf,printf, print - 格式化输出函数
* system, exec, `` - 系统命令调用函数
* glob, unlink, mkdir, rmdir, rename,chmod,chown, open, close, opendir,

closedir - 文件系统操作函数
* stat, lstat,localtime,gmtime,utime - 文档属性,时间相关函数
* hex, oct - 二进制,八进制,十六进制数转化成十进制的函数
* grep, map - list高级操作函数

这些函数的详细介绍,都可以通过命令:
#perldoc -f functionname
查到

常用库
* File::Basename - 根据path获取文件名或者文件路径
* File::Spec - 根据文件名与路径组合成全路经
* File::Find - 递归遍历某个目录下所有文件
* XML::Simple - 以一个复杂的结构来表示xml文件,使用起来相当方便
* Time::HiRes - 经常用来计算一个操作所耗费的时间
* Getopt::Long - 当脚本需要复杂的输入参数与选项时用到
* Cwd - 拿到当前工作目录
* IO::File - 文件操作 

 

8.正则表达式

      # =~ 或  !~的格式  ,后面跟的是要匹配的正则表达式

      # m// --->匹配正则表达式             s//--->替换正则表达式         tr// -------->翻译正则表达式

      # $true =($foo =~ m/foo/);  -->如果$foo和后面的匹配,则true=1,否则是0

     # my($hour,$minut,$second) = ($time =~ m/(\d+):(\d+):(\d+)/);  --->用括号,可以取到匹配的内容,按照次序分配给前面的变量

    # ?pattern? --->代表第一次匹配到的结果

 

@list = qw/food foosball subeo footnote terfoot canic footbrdige/;  #用qw括起来的就是字符串数组

foreach (@list)
{
   $first = $1 if ?(foo.*)?;   如果是第一次匹配到,放到$1中,到first中
   $last = $1 if /(foo.*)/;
}
print "First: $first, Last: $last\n";
# by www.yiibai.com
This will produce following result
First: food, Last: footbrdige

 

   #s/模式/替换成/ --->查找匹配模式的内容,替换为后面的结果

      #$sting =~ s/cat/dog/; -->将cat替换为dog

   #末尾可以加参数 o==只替换一次  g==全局替换

   #tr/a/o/--->将字符串中的所有a替换为o   tr/a-z/A-Z/--->所有小写换为大写

 

 

 

  

 

                           

posted @ 2015-09-25 12:45  luoyinqq  阅读(417)  评论(0编辑  收藏  举报