宣告 BLOCK 或編譯單元的其餘部分屬於指定的命名空間。套件宣告的範圍可能是提供的程式碼 BLOCK,或在沒有 BLOCK 的情況下,從宣告本身到目前範圍的結尾(封閉的區塊、檔案或 eval
)。也就是說,沒有 BLOCK 的形式會作用到目前範圍的結尾,就像 my
、state
和 our
運算子。此範圍內所有不合格的動態識別碼都將屬於指定的命名空間,除非被另一個 package
宣告覆寫,或它們是會限定到 main::
的特殊識別碼之一,例如 STDOUT
、ARGV
、ENV
和標點符號變數。
套件宣告只會影響動態變數,包括您已使用 local
的變數,但不會影響使用 my
、state
或 our
建立的詞彙範圍變數。通常,它會是 require
或 use
所包含檔案中的第一個宣告。您可以在多個地方切換至套件,因為這只會決定編譯器在該區塊的其餘部分使用的預設符號表。您可以透過在識別碼前面加上套件名稱和兩個冒號來參照當前套件以外的其他套件中的識別碼,例如 $SomePack::var
或 ThatPack::INPUT_HANDLE
。如果省略套件名稱,則會假設為 main
套件。也就是說,$::sail
等於 $main::sail
(以及 $main'sail
,這在舊程式碼中仍然可見,大多來自 Perl 4)。
如果提供了 VERSION,package
會將給定命名空間中的 $VERSION
變數設定為具有所提供的 VERSION 的 版本 物件。VERSION 必須是 版本 模組所定義的「嚴格」樣式版本號碼:正十進位數字(整數或小數分數),沒有指數運算,否則就是帶有前導「v」字元且至少有三個組件的點分十進位 v 字串。您應該每個套件只設定 $VERSION
一次。
請參閱 perlmod 中的「套件」 以取得有關套件、模組和類別的更多資訊。請參閱 perlsub 以取得其他範圍問題。