Perl脚本 入门基础

发布时间 2023-08-31 12:03:37作者: Juremy-420-bling

Perl 介绍

Perl是一个强大的脚本语言,主要用于文本处理。由于其强大的文字处理能力,Perl成为了IC行业中常用的脚本语言。

Perl变量

  • Perl变量只有三种:变量,数组,哈希表,使用时分别对应三个符号$,@,%
  $var = "str01"; #字符型变量
  $var = 123      #数值型变量
  # 在比较字符型变量时,使用eq(相等),gt(字符的ascii码左边大于右边),lt(字符的ascii码左边小于等于右边)
  # 在比较数值型变量时,使用==,>=,<=

  @array = (a, b, c); # 数组初始化用圆括号
  print array[0]; # 用下标访问数组

  %hash{'google'}='google.com'; # 声明一个key->value,google->google.com,用花括号括住key用作下标,单引号括住value
  print %hash{'google'}; # 这行命令打印出google.com

Perl控制流

  • Perl的控制流与C语言相近,包括if,while,for,foreach(在遍历数组时用到)
  $s01 = "abc";
  @a01 = (1,3,7);

  if(!($s01 eq "abc") && (@a01== 3)){ #如果变量等于"abc", 数组长度等于3,用@数组名就可以访问到数组的元素个数
    say "yes!\n" #say的效果是在print基础上,自动加上换行
  }

  for($i=0; $i<5; $i++){
    print("$i == %d\n",$i);
  }

  $k = 0;
  while($k < 5){
    print("for %d times while\n", $k);
  }

  @array=(3, 6, 9);
  foreach $elem(@array){
    say "foreach cycle $elem"
  }
  
  • 上面的if, for, while没有新的东西
  • foreach的不同是在foreach后面要写上 $elem, 用于表示每次遍历访问的对象。如果没有$elem, 那么系统默认使用$_来表示当前访问的对象
  • 另外,要使用say, 必须在文件前面加上use 5.010; 这个就硬记住。(用数据说话,5.010-say)

Perl 函数

  • Perl函数使用关键字 sub,同时不需要给定参数列表,用@_表示函数的参数。(看来这个Perl,很喜欢搞些默认变量)
  say ave(10, 30, 80);

  sub ave{
    $cnt = @_; #获取数组的元素个数
    $sum = 0;
    foreach(@_){
      $sum += $_;
    }
    return $sum/$cnt; #求平均数
  }
  • 上述获取数组的元素个数这里,就是上面提及的直接用数组名称赋值给变量。
  • 上面的例子说明了,在Perl中,调用函数可以在函数定义之前。
  • 函数中使用的变量默认是全局变量,如果要使用局部变量,就要加个关键字my
  • 为了增加代码的可阅读性,在调用函数时,要在函数名之前增加&
    应用上面的要求,上述的代码就整理为
  say &ave(10, 30, 80);

  sub ave{
    my $cnt= @_;
    my $num = 0;
    foreach(@_){
       $num += $_;
    }
    return $num/$cnt;
  }

  

强大的钻石操作符 '<>'

# in run.pl
    while(<>){
      print $_;
    }

# in abc.txt
one
two
three

上面的代码给出了两个文件的内容,run.pl和abc.txt. 当在terminal输入perl run.pl abc.txt, 此时钻石操作符'<>'就表示,逐行读取abc.txt,然后打印出来,直至abc.txt的最后一行。如果将while换成foreach也是同样的道理。

总结

上面整理了Perl脚本的基本内容,包括变量,控制流,函数和文件的读取(钻石操作符),这样就足够理解别人写的Perl脚本了。
需要特殊注意的有以下5点:

  1. foreach的用法
  2. say的用法,
  3. 调用函数时的&
  4. 函数定义时的my
  5. 还有一些默认的系统变量,$,@,<>