《Beginning Perl》讀書筆記1:0~3章

來源:互聯網
上載者:User
Perl概覽

Perl最早由Larry Wall開發,是一種“膠水”語言,例如將上一個程式的輸出做簡單處理,轉換為下一個程式的輸入。第一版Perl發佈於1987年12月18日,然後一直穩步升級,直到Perl 5. Perl 5是一個大升級,包含了一些對於Perl 4舊有文法的改進。該書寫作之時的Perl版本是5.10.1。Perl仍在不斷升級中,下一個大版本是Perl 6,Perl 6是全部重寫的Perl實現,與之前的版本不同,完全由社區貢獻代碼。

Perl的宗旨是“不止一種做法”(TMTOWTDI, There’s More Than One Way To Do It.)。具有以下優點:

  • 易於學習
  • 代碼可讀性好
  • 可移植(portable)
  • 善於進行文本處理
  • Perl是高層語言(high-level language),無需像C/C++考慮諸多細節
第1章:初識PerlHello, World!

第一個Perl程式(helloworld.pl):

#!/usr/bin/perluse warnings;print "Hello, world!\n";

 

 

Perl將源碼中#之後到行尾的內容視為注釋。而在Linux/Unix中,#!program表示由program處理該文字檔,因此首行寫#!/usr/bin/perl表示該檔案由/usr/bin/perl處理,若該檔案有+x許可權,則執行./helloworld.pl等同於執行perl helloworld.pl

開啟警告資訊

在源碼開始處聲明

use warnings;

或以-w參數調用perl運行.pl源碼均可開啟警告資訊

調試

使用perl –d運行.pl可以調試

第2章:標量

Perl中的標量(scalar)是指單個的單一資料型別,例如整數、浮點數、字串。字面量(literal)是一個常量,例如5. 變數是可以重賦值的標識符,所有變數以$開頭,例如$number。

數字
  • Perl中可以用底線為數字分段,例如10,000,000可以寫作10_000_000
  • 十進位數直接寫,0開頭八進位,0b開頭二進位,0x開頭十六進位
字串
  • 單引號對’’/雙引號對””均可表示字串,區別是單引號對中的字串不處理轉義符(’除外,\’表示’),例如print '\tThis is a single-quoted string.\n'; 輸出\tThis is a single-quoted string.\n而雙引號對中的字串處理轉義符。
  • 也可以用q//和qq//表示字串(兩/間為字串內容),q//相當於單引號寫法,qq//相當於雙引號寫法。除/外可以使用任何非字元、非數位字元,例如|、#. 除此之外還可以使用{}、[]、()、<>這四種符號對。
  • 可以用就地文檔(here-document)在代碼中包含大量文本。就地文檔的格式是:

<<label

文檔內容

label

其中label可以是EOF或是EOT. 文檔內容按照雙引號寫法的字串內容處理。通常有字串過長有多行時可用就地文檔聲明,例如:

print <<EOF;This is a here-document. It starts on the line after the two arrows,and it ends when the text following the arrows is found at the beginningof a line, like this:EOF

 

  • 數字/字串轉換
    • "0.25" * 4的值為1
    • hex()函數將十六進位寫法的數值字串轉換為Number類型
    • oct()解析八進位寫法的數值字串
運算子
  • +、-、*、/、++、--、(、)、&、|、^、~、==、!=、&&、||、!、=、,同C/C++、Java
  • $a = $a <some operator> $b; 可以簡寫為$a <some operator>= $b; 例如$a=$a+$b可以寫作$a+=$b同C/C++、Java
  • **是冪運算運算子,2**4=16
  • Perl中以下值是布爾值false:0(數字0)、”0”(字串”0”)、””(Null 字元串)、Undefined、空表(empty list)
  • <=>運算子:a<=>b比較a和b的大小,a大為1,相等為0,b大為-1
  • 字串運算子:.為字串合并算符,”ba”.”nana”->”banana”
  • 通過x可以進行字串乘法”ba”.(”na” x 2) ->”banana”
  • ord()可取得一個字元的ASCII值,例如ord(“f”)->102
變數
  • 變數範圍為當前代碼塊以及該代碼塊內的所有子塊。
  • 通常情況下可任意聲明、賦值變數。但這樣存在一個問題,如果一開始聲明$foo = 4; 而後面寫成了$ofo = 7;會使得代碼工作不正確(而且還一下子發現不了)
  • 可通過聲明use strict;讓Perl嚴格檢查變數使用。使用未定義/初始化的變數將會導致編譯錯誤。在strict模式下聲明變數必須使用my關鍵字,例如my $record;. 為了代碼規範易維護建議使用use strict
  • 特殊變數:有一些特殊變數,例如$_代表了很多函數輸入、輸出的預設參數。關於特殊變數可參考perldoc perlvar
  • 雙引號中可使用變數,變數將會被代換為其值。例如
my $name = "fred";my $salutation = "Dear $name,";print $salutation, "\n";

輸出

Dear fred,

標準輸入<STDIN>
  • my $yen = <STDIN>;從STDIN中讀一次,每賦值一次就讀一次
  • chomp()修改輸入參數的指定的字串,如果該串最後一次字元是分行符號,則將其去掉,如果不是則不做修改
  • chop()函數移除輸入字串的最後一個字元
  • chomp()和chop()直接修改輸入,無傳回值
兩個函數
  • exit()用於退出,exit()等價於exit(0),正常退出。exit(1)為帶錯誤退出
  • die()用於報錯退出,die接受一個字串參數,將其列印至STDERR然後exit(1)退出兩個函數
第3章:流程式控制制
  • 與C/C++、Java相同的:

    • if(){…}else(){…}
    • for(init; cond; op){…}
    • while(cond){…}
    • do{…}while(cond)
    • 無限迴圈while(1){…}
  • 邏輯算符
    • 字串比較算符:gt(>)、lt(<)、ge(>=)、le(<=)、eq(==)、ne(!=) 注意括弧內僅為注釋,不可替代通用
    • defined($var)算符。如果$var已定義則為true,反之false.
    • 可用and代替&&,or代替||,not代替!. 注意and/or/not的算符優先順序與&&/||/!不同
    • if(){…}elseif(){…}elseif(){…}else(){…}可用於多分支流程式控制制
    • unless(cond)等價於if(!cond)
    • 可以將
if ($number == 0) {die "can't divide by 0";}

 

寫作

die "can't divide by 0" if $number == 0;

 

  • until(cond){…}等價於while(!cond){…}
  • foreach my $var list可用於使用變數$var遍曆列表list,例如foreach my $number (1 .. 10) {…}
  • do{…}until(cond)等價於do{…}while(!cond)
  • Perl中的last等於C/C++、Java中的break,next等於continue
  • redo語句可以重啟迴圈,從迴圈開始處執行。注意redo重啟迴圈對於for和while/until並不進行條件檢查,而是直接從頭開始執行迴圈(個人理解,就是在next的基礎上去掉條件檢查)
  • 迴圈標記。預設last、next、redo僅僅對所在的那一層迴圈有效。如果想跳至外層則需要使用標記:
OUTER: while ($i <= 5) {my $j = 1;while ($j <= 5) {last OUTER if $j == 3;print "$i ** $j = ", $i ** $j, "\n";$j++;}$i++;}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.