Perl學習

1. 第一個程序:正則表達式

#!/usr/bin/perl數組

print "hello world.\n";函數

 

2. 第二個程序scala

#!/usr/bin/perl對象

use 5.010; #告訴perl要使用5.010版本的新特性排序

say "hello world."; #與print效果同樣,只是不須要「\n」便可換行索引

 

3. 使用變量前不須要定義rem

 

4. 第三個程序字符串

#!/usr/bin/perl
#
@lines = `perldoc -u -f atan2`; #用倒引號調用外部程序,輸出的結果會一行行地存儲在@lines這個數組變量中。
foreach (@lines) {
s/\w<([^>]+)>/\U$1/g;
print;
}string

 

5. 在 Perl 中,無論是數字仍是字符串都用標量(scalar)來存儲,一個標量變量以 $ 開頭。Perl是經過操做符來識別變量是數字仍是字符串。

 

6. 字符串操做

   6.1 "aaa"."bbb"

   6.2 "aaa" x 4 #aaa重複4次

 

7. 標量變量

  以$開頭

8. 比較操做符

比較      數字    字符串

相等      ==     eq

不等      !=    ne

小於      <     lt

大於      >     gt

小於或等於    <=     le

大於或等於    >=     ge

 

9. if語句

  if () {

  } else {

  } #必定要有{},哪怕只有一個語句

 

10. 獲取用戶輸入

  $text = <STDIN> #獲取用戶輸入

  chomp($text) 或 chomp $text #去掉"\n"

 

11. while 語句

  $count = 0;

  while ($count < 10) {

    $count += 2;

    print "$count\n";

  }

 

12. undef值 

  如查一個變量沒有被賦值,那麼它的值是undef,表示什麼也沒有。

  $line = <STDIN>;

  if (defined($line) ) #若是$line是undef,返回假 {

    print "$line\n"

  }

 

13. 列表與數組

  列表是指標量的有序集合,數組是存儲列表的變量。

  13.1 訪問數組

    $array[0] = 0;

    $#array 比數組大小小1,由於數組下標是從0開始。

    $array[-1] 表示最後一個元素

  13.2 列表直接量

    (1,2,3)

    (1..5)與 (1,2,3,4,5)等價

    (1, 「abc」)列表中能夠有任何標量值

  13.3 qw簡寫

    qouted word 這種寫法能夠減小引號與逗號輸入次數。

    qw( abc def ghi)

  13.4 pop 和 push 操做

    @array  = 5..9;      #定義數組(5,6,7,8,9)

    $fred   = pop(@array);  #fred等於9 array變成(5,6,7,8)

      

    push(@array, 0);==》push @array, 0; #向數組添加一個數

    push @array, 1..10; #向數組添加一個數組

    @others = qw(1 2 3);

    push @array, @others;

  13.5 shift 和 unshift

    pop與push處理的數組尾部,而shift與unshift處理的數組開頭。

  13.6 splice 操做符

    其最多能夠有4個參數,其使用方法以下:

    示例1 :

    @array = qw (1 2 3 4);

    @removed = splice @array, 2;#array 等於(1,2),removed等於(3,4)。

    示例2 :

    @array = qw (1 2 3 4);

    @removed = splice @array, 2, 1; #array equals (1 2 4), remove equals (3).

    示例3 :不僅刪除,還能夠添加,若是第三個參數爲0,則只添加不刪除。

     @array = qw (1 2 3 4);

     @removed = splice @array,2,1,@array1;

  13.7 foreach控制結構

    $_變量

    foreach (1..10) {

      say $_;

    }

  13.8 reverse操做符

    reverse @array; #反轉array數組。

  13.9 chomp

    

  13.10 sort操做符能夠對數組進行排序

  13.11 each 操做符

    返回數組的值與索引。

    while ( my($index, $value) = each @array ) {

      say "$index: $value";

    }

  13.12 $#array,表示數組的大小。

  13.13 去掉一行行首與行尾的空格 :    

     my $str = " xyj";
     $str =~ s/^\s+|\s+$//g;
     print $str;
     print "\n" ;

    或

    先去掉前面的: $a=~s/^ +//; 

    在去掉後面的: $a=~s/ +$//;

14 子程序

  14.1 定義子程序

    sub marine {

    }

  14.2 調用子程序

    &marine;

  14.3 返回值

    最後一次的運算結果會被看成子程序的返回值。

  14.4 子程序的參數

    @_   是一個數組,@_[0]表示第一個參數。

  14.5 子程序的私有變量

    perl腳本里,全部的變量都是全局的,但能夠my($m, $n)定義私有變量。

    一般會這樣用:my($m,$n) = @_

  14.6 變長參數列表

    if (@_ != 2)  能夠判斷參數的長度。

  14.7 return操做符

    若是子程序執行到一半想退出,那麼就能夠用return,return後面能夠有返回值。

  14.8 子程序的調用方式

    &chomp;   或  chomp(1,2);

15 輸入輸出

  15.1 <STDIN>

  15.2 鑽石操做符

    while (<>) {

      chomp;

      print "$_\n";

    } 這段代碼能夠打開以文件名做爲腳本參數的文件,並打印每一行。

  15.3 腳本是如何獲取參數的

    @ARGV

    foreach (@ARGV) {

      print "$_\n"

    }

  15.4 輸出到標準輸出

    print <>   至關於cat命令

    print sort <> 至關於sort命令

  15.5 格式化輸出

    printf

  15.6 文件句柄

    open CONFIG, 'dino';

    open CONFIG, '<dino';

    open CONFIG, '>dino';

    open CONFIG, '>>dino';

    打開文件句柄後,就能夠像STDIN同樣使用了。

    print CONFIG "out put.\n";

    關閉文件句柄 close CONFIG

  15.7 die操做符

    if ( ! open LOG, '>>', 'logfile' ) {

      die "cannot create logfile: $!"

    $!表示錯誤碼。

 

    die 會終止程序的運行,而且會把程序名和行號附加在錯誤信息的後面。

  15.8 autodie

    use autodie;

    本身沒必要寫die語句,若是有致命錯誤發生,腳本會自動調用die。

  15.9 改變默認的文件輸出句柄

    select 句柄   #但記得以後恢復默認句柄    

    if ( ! open LOG, '>>', 'logfile' ) {

      die "cannot create logfile: $!";

    }

    while ( <LOG> ) {

    }

    或

    select LOG;#會改變默認句柄。

    $| = 1 #至關於作了sync操做。

    或  print 句柄 「abc」

  15.10 句柄能夠存在標量中

    open $jubing , 文件 

16. 哈希

  16.1 訪問哈希元素

    $hash{$key}

  16.2 賦值

    my %hash = {

        abc => "123",

        def => "456",

    };

  16.3 哈希函數

    16.3.1 kes 和 values

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

      my @k = keys %hash;

      my @v = values %hash;

      注:在標量上下文中,這兩個函數返回鍵值對的個數,$k = keys %hash

    16.3.1 each函數

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

        say "$key => $value";

      }

    16.3.2 exists函數

      查看某個鍵對應的值是否存在。

      if (exists $books{"key"}) {

      }   

    16.3.4 delete函數

      刪除hash中key對應的值。

  17 正則表達式

    17.1 在perl語言中使用正則表達式

      m 定界符 正是表達式 定界符   如: m(a*b)<=> /a*b/

      注:定界符不惟一。

    17.2 大小寫無關匹配

      chomp($_ = <STDIN>);

      if (/yes/i) {

      }

    17.3 匹配任意字符

      默認狀況下點號沒法匹配換行符,/patten/s,便可匹配任意字符。

    17.4 用/x加入空白符

      /patten/x #其中patten能夠有空格

      這樣就能夠寫出如上面的匹配形式,若是真的想要匹配空符的時候,能夠用轉意(\t或\s)。 

    17.5 錨位

      絕對開頭 /Ahttp:*/

      絕對結尾/.png/z

    17.6 整詞匹配

      /\babcdefg\b/

    17.7 綁定操做符 =~

      默認狀況下模式匹配的操做對象是$_

      $some_other =~ /patten/s;

    17.8 模式中的內插

      也就是patten能夠爲一個變量。

      my $what = "pattern";

      if (/\A($what)/) { # 模式的錨位被定在字符串的開頭。

      }

    17.9 示例

      $_ = "Hello there, neighbor";

      if (/\s(\[a-zA-Z],/) {

        print "the word was $1\n";

      }

      $1表示匹配到的結果。這裏$1等於「hello,」,不包括空格,也不包括逗號,且只匹配一個,即便後面還有能夠匹配的單詞也不會再匹配。

      $_ = "Hello there, neighbor";

      if (/(\S+) (\S+), (\S+)/) {

        print "$1 $2 $3\n";

      }

      這個例子能夠匹配三個單詞。

      其實$1 $2 $3變量對應的是圓括號內的匹配模式。默認狀況下圓括號內的匹配結果都是要存在$1這樣的變量中的,但能夠禁止:(?:pattern)

 

      但$1這種形式很差記,還能夠將匹配結果放進哈希表內。

      my $names = 'Fred or Barney';

      if ( $names =~ m/(?<name1>\w+) (?:and|or) (?<name2>\w+ ) {

        say "I saw $+{name1} and $+{name2}";

      }

    17.10 split操做符

      my @fields = split /separator/, $string;

      my @fields = split; #它會省略開頭的空字段,並以空字段分隔字符串。

    17.11 join函數

      my $x = join ":", 4, 6, 8, 10;

  18 last操做符 與c語言中的 break等價

  19 next操做符與c語言中的continue等價

  20 redo操做符,回到循環的頂端

  21 條件操做符

    expresion ? == : ==;

  22 邏輯操做符

    與&& 或|| 非

相關文章
相關標籤/搜索