Perl'de .pm (Perl modülü) ve .pl (Perl betiği) dosyası arasındaki fark nedir?


88

.pm(Perl modülü) ve .pl(Perl betiği) dosyası arasındaki fark nedir ?

Lütfen bana neden 1dosyadan döndüğümüzü de söyleyin . Return 2 veya başka bir şey varsa, herhangi bir hata oluşturmuyorsa, neden 1Perl modülünden dönüyoruz?


11
1önemli değil. Olabilir, olabilir 2, "foo"olabilir ["a", "list"]. Önemli olan, olmaması 0ya da yanlış olarak değerlendirilen ya useda başarısız olacağıdır.
Amadan

.pl aslında bir perl kitaplığıdır - C programları veya diğer dillerde yazılmış programlar gibi perl betiklerinin, pencereler gibi işlevine ihtiyaç duyan işletim sistemleri dışında bir sonu yoktur.
Monica'yı

Yanıtlar:


78

Özünde, kullandığınız dosya uzantısı, perlbu dosyaları nasıl yorumladığına dair hiçbir fark yaratmaz.

Ancak, .pmpaket adını izleyen belirli bir dizin yapısını takip eden dosyalara modüller koymak bir kolaylık sağlar. Yani, bir modül varsa Example::Plot::FourDve bir dizine koyun Example/Plot/FourD.pmGözlerinde farklı bir yolda @INC, sonra useve requireolduğu gibi paket adı verildiğinde doğru olanı yapacağız use Example::Plot::FourD.

Dosya, herhangi bir başlatma kodunun başarılı bir şekilde yürütüldüğünü belirtmek için son ifade olarak true döndürmelidir, bu nedenle, 1; aksi takdirde true döneceğinden emin olmadığınız sürece böyle bir dosyayı sonlandırmak gelenekseldir . Ancak 1;, daha fazla ifade eklemeniz durumunda, sadece koymak daha iyidir .

Eğer EXPRbir bareword olduğunu requirekolay bunu yapmak için standart modülleri yüklemek için bir ".pm" uzantısı ve yerine geçer '::' '/' ile sizin için dosya adını varsayar. Modüllerin bu şekilde yüklenmesi ad alanınızı değiştirme riskini almaz.

Tek useyapmanız gereken, sağlanan paket adından dosya adını bulmak, requirebunu bir BEGINblokta bulmak ve importpaketi çağırmaktır . Kullanmamanızı engelleyen hiçbir şey yoktur, useancak bu adımları manuel olarak atabilirsiniz.

Örneğin, aşağıda Example::Plot::FourDpaketi adlı bir dosyaya koydum, dosyadaki t.plbir komut dosyasına yükledim s.pl.

C:\Temp> cat t.pl
package Example::Plot::FourD;

use strict; use warnings;

sub new { bless {} => shift }

sub something { print "something\n" }

"Example::Plot::FourD"

C:\Temp> cat s.pl
#!/usr/bin/perl
use strict; use warnings;

BEGIN {
    require 't.pl';
}

my $p = Example::Plot::FourD->new;
$p->something;


C:\Temp> s
something

Bu örnek, modül dosyalarının bitmesi gerekmediğini 1, herhangi bir gerçek değerin yeterli olacağını gösterir.


-2

Bir .pl, tek bir komut dosyasıdır.

.Pm ( Perl Modülü ) içinde, diğer Perl betiklerinden kullanabileceğiniz işlevlere sahipsiniz:

Bir Perl modülü, bir Perl programı veya diğer Perl modülleri tarafından kullanılabilen bağımsız bir Perl kodu parçasıdır. Kavramsal olarak bir C bağlantı kitaplığına veya bir C ++ sınıfına benzer.


5
"Bir .pl tek bir komut dosyasıdır." Doğru değil. Yalnızca bozuk işletim sistemlerinde Perl programlarını .pl uzantısıyla tanımlamanız gerekir. Ve başlangıçta .pl bir "Perl kitaplığı" - bir "gerekli" veya "yap" komutuyla yüklediğiniz harici alt yordamlar anlamına geliyordu.
Dave Cross
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.