1. #!/usr/bin/perl -w  

  2. #########################################################################  

  3. # File Name: test.pl  


  4. #########################################################################  

  5.   

  6. print "hello word \n";  

  7.   

  8. print "---- 变量定义用\$ 符号------\n";  

  9. $a=`echo xxxx`;  

  10. print "$a";  

  11.   

  12. $b='aaaa'.'hhhh';  

  13. $c="bbbb";  

  14. $d="$b"."$c";  

  15. $d.='eeee';  

  16. print "$d\n";  

  17.   

  18. print "d: $d\n";  

  19.   

  20. $bl1 = 1>=0;  

  21. $bl2 = 1>=3;  

  22. print $bl1;  

  23. print $bl2;  

  24.   

  25. print "---- if elsif else 条件判断语句 ----\n";  

  26. $if1=2;  

  27. if($if1 == 1){  

  28.     print "pass\n";  

  29. }elsif($if1 == 2){  

  30.     print "==2\n";  

  31. }else{  

  32.     print "fail\n";  

  33. }  

  34.   

  35. #chomp($in1 = <STDIN>);  

  36. #print "your input: $in1\n";  

  37.   

  38. #if(defined($in2)){  

  39. #   print "1";  

  40. #}else{  

  41. #   print "2";  

  42. #}  

  43.   

  44. print " ------- \@ 符号来定义数组 ------ \n";  

  45. @array = (1,2,3,"4")x4;  

  46. print "$array[1]\n";  

  47. print "$#array\n";  

  48. print "$array[-1] \n";  

  49.   

  50. $xtest="123"x5;  

  51. print "$xtest\n";  

  52.   

  53.   

  54. print "pop push 针对数组的末尾操作 \n";  

  55. print "pop 取出最后一个,返回数组剩下的, push将一个元素添加到末尾 \n";  

  56. print "shift unshift 为 pop push的反向操作,针对数组头\n";  

  57.  

  58. @array2 = 5..10;  

  59. print "$#array2  ----  $array2[-1] \n";  

  60. pop @array2;  

  61. print "$#array2  ----  $array2[-1] \n";  

  62. pop(@array2);  

  63. print "$#array2  ----  $array2[-1] \n";  

  64.   

  65. print "---------- array3 ----------\n";  

  66. @array3 = 1..3;  

  67. print "$#array3  ----  $array3[-1] \n";  

  68. push @array3,9;  

  69. print "$#array3  ----  $array3[-1] \n";  

  70. push @array3,10...12;  

  71. print "$#array3  ----  $array3[-1] \n";  

  72.   

  73. print "---------- array4 ----------\n";  

  74. @array4 = 1..3;  

  75. print "@array4  ----  $array4[0] \n";  

  76. shift @array4;  

  77. print "@array4  ----  $array4[0] \n";  

  78. unshift @array4,99;  

  79. print "@array4  ----  $array4[0] \n";  

  80. unshift(@array4,'98');  

  81. print "@array4  ----  $array4[0] \n";  

  82.   

  83. print "---------- array5 ----------\n";  

  84. @array5 = qw(eating rocks is wrong);  

  85. $array5 = "right";  

  86. print "@array5 ... $array5  \n";  

  87. print "this is $array5[3] \n";  

  88. print "this is ${array5}[3]\n";  

  89. print "this is $array5"."[3]\n";  

  90. print "this is $array5\[3] \n";  

  91.   

  92. print "--------- for --------------\n";  

  93. for($i=0; $i<10; $i++){  

  94.     print "for: $i\n";  

  95. }  

  96.   

  97. #实际for和foreach是一样的  

  98. #中断循环对比C 的break和continue,Perl分别对应的是 last 和 next  

  99. #Perl中还特有 redo, 调到当前循环的顶端,不进行条件判断就再次执行本次循环  

  100. #next会进入下一次循环,redo会继续执行本次循环  

  101. print "--------- foreach ----------\n";  

  102. @rocks = qw(bedrock slate lava);  

  103. print "before rocks: \n @rocks \n";  

  104. foreach $rock (@rocks){  

  105.         #如果有 redo 应该跳到的位置  

  106.     $rock = "\t$rock";  

  107.     $rock .= "\n";  

  108.     print "new rock: $rock \n";  

  109. }  

  110. print "after rocks: \n @rocks \n";  

  111.   

  112. print "--------- reverse 翻转 ----------\n";  

  113. @reverse1 = reverse 6..9;  

  114. print "@reverse1 \n";  

  115. @reverse2 = reverse @reverse1;  

  116. print "@reverse2\n";  

  117.   

  118. print "--------- sort 排序 -------------\n";  

  119. @sort1 = qw(aaa ccc eee bbb ddd);  

  120. print "@sort1\n";  

  121. @sort1 = sort(@sort1);  

  122. print "@sort1\n";  

  123.   

  124.   

  125. print "--------- context -----------\n";  

  126. print "变量和列表会根据上下文给出不同的值\n";  

  127. print 1+@sort1."\n";  

  128. @rocks = qw(xxx aaa ccc);  

  129. print "I have",@rocks,"rocks!\n";  

  130. #强制转换为标量  

  131. print "I have", scalar @rocks, "rocks!\n";  

  132.   

  133. print "--------- sub ----------------\n";  

  134. sub subtest1{  

  135.     $temp=$a.$b;  

  136.     $temp;  

  137. }  

  138. $a = "1";  

  139. $b = "2zzzzz";  

  140. $c = &subtest1;  

  141. print "c: $c\n";  

  142.   

  143. sub addfunc{  

  144.     $size = @_;  

  145.     print "param size: $size\n";  

  146.     my($num1, $num2);  

  147.     ($num1, $num2) = @_;  

  148.     $num1 + $num2;  

  149. }  

  150.   

  151. $addresult = &addfunc(100,99);  

  152. print "addresult: $addresult\n";  

  153.   

  154. print "-------- 子程序 == 函数 ----\n";  

  155. print "函数参数放在 \@_数组内,可以用shift循环的切出第一个参数\n";  

  156. print "my() 定义局部变量\n";  

  157. print "子程序的返回值就是最后一部的计算值\n";  

  158.   

  159. sub max{  

  160.     my($maxValue) = shift @_;  

  161.     foreach(@_){  

  162.         if($_>$maxValue){  

  163.             $maxValue = $_;  

  164.         }  

  165.     }  

  166.     $maxValue;  

  167. }  

  168. @numset = (100,600,3000,3001);  

  169. $maxValue = &max(@numset);  

  170. print "maxValue: $maxValue\n";  

  171.   

  172.   

  173. sub which_element_is{     

  174.     if(@_ < 2){  

  175.         return "输入参数个数不能小于2";  

  176.     }  

  177.   

  178.     my($what, @array) = @_;  

  179.     my $index = 0;  

  180.     foreach(@array){  

  181.         if($what eq $_){  

  182.         #判断字符串相等不能使用==,只能用eq  

  183.             print "Find this element [$_]: $index\n";  

  184.             return $index;  

  185.         }  

  186.         $index++;  

  187.     }  

  188.     return "can't find this element";      

  189. }  

  190. @names = qw(kevin xiang jie);  

  191. $which_element = &which_element_is("jie", @names);  

  192. print "which_element: $which_element\n";  

  193.   

  194. print "上面的程序都是不严谨语法, 开头添加 use strict 变为严谨语法检测\n";  

  195. print '定义变量时需要用my定义, my $baa = 1;  '."\n";