Soru tarihi:
Perl'de ad alanı, programın farklı bölümleri arasında değişkenleri ve fonksiyonları izole etmenin ana yoludur. package yönergesi ile bağımsız alanlar oluşturulmaktadır; her biri kendi küresel değişkenler ve fonksiyonlar setini alır. Bu, çok dosyalı projelerin isim çatışmaları olmadan geliştirilmesini sağlar.
Sorun:
Görünürlük (scoping) ile yanlış çalışma, leksik ve paket değişkenlerinin karışması, ya da "main" adlı ad alanında yanlış çalışmak genellikle sorunlara yol açar: beklenmeyen değişkenlerin ortaya çıkması, fonksiyonların üzerine yazılması, vergi ve testlerde belirsiz hatalar.
Çözüm:
package SomeName; ile açıklar.my) sadece blok içinde görünürken, küresel olanlar (our, daha önce use vars) tüm paket genelindedir.AnotherPackage::some_function().Kod örneği:
package MyApp::Utils; our $global_var = 10; sub do_something { return $global_var + 1; } package main; print MyApp::Utils::do_something(); # 11
Anahtar özellikler:
:: ile açıkça belirtilmelidir.main, betikler için varsayılan standart küresel ad alanıdır.my, our ve local paketler arasındaki fark nedir?
my — her zaman sadece geçerli leksik blokta.our — paket için küresel bir değişken tanımlar, fakat onu blokta leksik bir referans olarak kullanılabilir hale getirir.local — bir blok süresince paket değişkeninin küresel değerini geçici olarak yeniden tanımlar.Paket belirttiğimiz olmadan fonksiyon çağırabilir miyiz?
Evet, eğer fonksiyon mevcut pakete Exporter modülü ile dışarı aktarılmışsa, aksi takdirde yalnızca tam ad ile çağrılabilir.
Bir dosyada birden fazla package tanımlamak mümkün mü?
Evet, fakat bu anlaması zor — her package'dan sonra tüm sonraki tanımlar yeni bir ad alanına aittir. Her paket için ayrı dosyalar kullanmak daha iyidir.
main'den diğer paketlere değişkenlerin ve fonksiyonların kazara içe aktarılması ya da üzerine yazılması.Bir komut dosyasında ardışık birkaç package kullanıldı; değişkenler karıştı, bazen leksik, bazen küresel oldular.
Artılar:
Eksiler:
Her package kendi ayrı modülüne alındı, fonksiyonlar açık bir şekilde dışa aktarıldı.
Artılar:
Eksiler: