ProgramlamaBackend geliştirici

Perl'de modüllerin organizasyonu ve içe aktarılması için hangi yöntemler vardır? @INC sistemi ve use/require nasıl çalışır? Kendi modülünüzü oluşturma ve bağlama örneği verin.

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

Perl'de kod organizasyonu için modüller (paketler) kullanılır ve bunlar .pm uzantılı ayrı dosyalarda tanımlanır.

  • Modülü bağlamak için use (derleme aşamasında) ve require (çalışma aşamasında) kullanılır.
  • Modül ararken Perl özel bir dizi olan @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.

Kandırmaca Sorusu

use ve require arasındaki fark nedir? Hangi işlemciyi ne zaman kullanmalıyız?

Cevap:

  • use — derleme aşamasında çalışır, otomatik olarak import ç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.

Konuyla ilgili ince noktaların bilinmemesinden kaynaklanan gerçek hata örnekleri


Hikaye

Büyük bir projede, kendi kütüphanemizi require ile bağladık, ve export edilen fonksiyonların kullanıldığını unuttuk. Kullanılan fonksiyon dışa aktarılmamıştı çünkü require import ç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 lib ile eklemeyi veya @INC değ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; yerine use Foo;. Perl modülü bulamadı, bu nedenle uygulamanın kritik kısımlarının işlevselliği bozuldu.