4.5 變數的範圍

若沒有特別宣告,您使用的變數為一全域變數,這並不是很好的習慣,有時這容易造成不良的影響,使程式變得不易偵錯。因此之故,Perl 提供一 my 的關鍵字,可讓您將某一變數變成區域變數,該區域變數的作用範圍限制在某一區塊中,如下例:

$a = "foo";
if ($some_condition) {
    my $b = "bar";      # my 宣告 $b 為區域變數,只在 { } 才有效,只要離開區塊,$b 內容自動消失。
    print $a;           # 印出 "foo"
    print $b;           # 印出 "bar"
}
print $a;               # 印出 "foo"
print $b;               # 沒有顯示任何東西; 因為 $b 已經離開 { } 區塊範圍了,此 $b 並非區塊中的 $b。

通常,我們在程式一開始,會宣告 use strict; 搭配 my 來使用,表示我們將使用嚴格的變數檢查。這樣做的好處之一是,避免不小心打錯變數名稱,將來有利於程式偵錯。比如:

#! /usr/bin/perl

use strict; # 表示:變數使用前,需先 my 宣告一下才行

my $name = "foo";
if (some_condition) {
    my $base = "bar";    
    print $name;
    print $base;
}

print $mame;   # 打錯字了,應該是 $mame,由於 $mame 這個變數沒有事先用 my 宣告,
所以程式執行時會發生錯誤,您便可藉此得知:原來是變數 $mame 打錯了,應該是 $name 才對。

除了 my 之外,另有一 local 作用類似,但意義不同。由於初學者不易弄懂 local 和 my 的差別,因此暫不說明 local 的用法。