Perl'de kod organizasyonu için modüller (paketler) kullanılır ve bunlar .pm uzantılı ayrı dosyalarda tanımlanır.
use (derleme aşamasında) ve require (çalışma aşamasında) kullanılır.@INC kullanır; bu, Perl'in modülleri aradığı dizinler listesidir.Modül örneği:
Foo.pm
package Foo; use strict; use warnings; sub say_hello { print "Hello from Foo! "; } 1;
Bağlama ve Kullanma:
use lib '.'; # Geçerli klasörü @INC'ye ekler use Foo; Foo::say_hello(); # Çıktı: Hello from Foo!
Temel farklar:
use, modülü betiğin başında yükler ve otomatik olarak import metodunu çağırır, eğer varsa.require ise modülü yalnızca ilk çağrıda yükler.use ve require arasındaki fark nedir? Hangi işlemciyi ne zaman kullanmalıyız?
Cevap:
use— derleme aşamasında çalışır, otomatik olarakimportçağırır (genellikle modüller için kullanılır).require— çalışma zamanında çalışır, modül adı çalıştırmadan önce bilinmiyorsa veya her zaman bağlanması gerekmiyorsa kullanılır.
Hikaye
Büyük bir projede, kendi kütüphanemizi
requireile bağladık, ve export edilen fonksiyonların kullanıldığını unuttuk. Kullanılan fonksiyon dışa aktarılmamıştı çünkürequireimportçağırmıyordu. Sonuç olarak, sembollerin içe aktarımı çalışmadı, fonksiyonları açıkça çağırmak zorunda kaldık.
Hikaye
Modülü ayrı bir klasöre taşırken, klasör yolunu
use libile eklemeyi veya@INCdeğişkenini değiştirmeyi unuttuk. Modül bulunamadı, betik hata ile sona erdi, dosya projenin doğru yerinde olmasına rağmen.
Hikaye
Eski bir uygulamada, modülü küçük harfle adlandırdık ama büyük harfle bağladık:
use foo;yerineuse Foo;. Perl modülü bulamadı, bu nedenle uygulamanın kritik kısımlarının işlevselliği bozuldu.