[Perl] 程式設計教學:宣告和使用變數 (Variable)

【分享本文】
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

    變數 (Variable) 的前綴 (Sigil)

    在電腦程式中,變數 (variable) 是用來操作資料的標籤。和大部分程式語言的差異在於 Perl 變數前會加上 sigil,不同 sigil 代表不同意義:

    • $ (scalar):表示純量
    • @ (array):表示陣列
    • % (hash):表示雜湊
    • & (subroutine):表示副常式

    純量可能儲存內建型別、參考或其他型別的資料,一開始只需考慮內建型別的情境即可。陣列和雜湊為 Perl 內建的資料結構,我們將於後文說明。

    筆者無法確認當初使用 sigil 的用意為何,根據 sigil 的作用來看,可能是做為變數的標註 (annotation)。像是 $v 可看出來是一個純量變數,而 @a 是一個陣列。不過,有些對 Perl 不熟的程式人,反而覺得 sigil 會造成混淆。

    以下是使用變數的短例:

    # Declare a variable `$name` and assign some string to it.
    my $name = "Michael";
    
    # Use `$name` as a function parameter.
    print "Hello ", $name, "\n";
    

    在 Perl 中,使用 my 來宣告變數。

    合法的識別字 (identifier) 名稱

    在宣告變數時,變名名稱又叫做識別字 (identifier)。在 Perl 程式中,原本識別字不具有什麼意義,是透過宣告變數的動作才賦予其意義。以下是命名 Perl 識別字的規則:

    • 開頭使用適當的 sigil
    • 第一個字為字母 (letters) 或 _ 底線 (underscore)
    • 第二個字以後可為字母、底線或數字

    除了合法的識別字外,還有一些建議的命名風格,詳見下一節。

    命名識別字的風格

    在一般程式設計社群中,有三種命名風格:

    • $PascalCase (大駝峰命名法)
    • $camelCase (小駝峰命名法)
    • $snake_case (蛇形命名法)

    Perl 本身未強制規範命令風格,一般變數以蛇形命名法 (snake case) 較常見。大駝峰命名法會保留給類別 (class) 和模組 (module) 來使用。

    在 Perl 程式中,同名但不同大小寫的變數視為相異的變數,像是 $foo$Foo$FOO 視為三個不同的變數。但實務上不應用這種方法來區分變數,因為會造成閱讀 Perl 程式碼的困難。

    內建變數 (Builtin Variables)

    Perl 設置許多內建變數,這些變數不需宣告即可立即使用,像是 @ARGV 表示傳入 Perl 程式的命令列參數。perlvar 文件維護一份內建變數的清單,有需要的讀者可自行前往觀看。一開始不需強記這些內建變數,邊寫邊查自然會記住這些變數。

    由於大部分的 Perl 內建變數使用符號而非英文字所組成的識別字,在可讀性上會比較差。如果需要撰寫多人維護的 Perl 命令稿,建議用 English 模組將內建變數轉為等義的英文識別字,加強這些內建變數的可讀性。

    保留字 (Keywords)

    保留字 (keywords) 是程式語言的內建語法,在 Perl 程式中已經具有特定的意義,不可做為識別字名稱。這份文件維護一份 Perl 保留字的清單,讀者可自行前往觀看。學程式設計時不要強記保留字,多撰寫 Perl 程式後會自然記住;另外,編輯器會用語法高亮提示保留字。

    【分享本文】
    Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email
    【追蹤新文章】
    Facebook Twitter Plurk