Jaka jest różnica między plikami bibliotek a modułami w Perlu?

10
Chankey Pathak 16 czerwiec 2011, 21:24

3 odpowiedzi

Najlepsza odpowiedź

To cały kod Perla do perl. Wszystkie rozróżnienia są czysto idiomatyczne.

Kod Perla przeznaczony do włączenia, który używa dyrektywy package:

  • Nazywany „modułem”.
  • Zwykle ma rozszerzenie .pm. Aby je znaleźć, musisz mieć to rozszerzenie use.
  • Powinien być zawsze ładowany za pomocą require, prawdopodobnie przez use.
  • Bardziej modułowy, lepiej obsługiwany przez CPAN.

Kod Perla przeznaczony do włączenia, który nie używa dyrektywy package:

  • Nazywana „biblioteką”. (Przynajmniej historycznie. W dzisiejszych czasach słowo „biblioteka” może być również używane w odniesieniu do modułu lub dystrybucji).
  • Zwykle ma rozszerzenie .pl.
  • Powinien być zawsze ładowany za pomocą do.
  • Zanieczyszcza przestrzeń nazw rozmówcy.
  • Zwykle wskazuje na projekt niespełniający norm. Unikaj tego!

Kod Perla przeznaczony do bezpośredniego wykonania przez interpreter:

  • Nazywany „skryptem”.
  • Zwykle ma rozszerzenie .pl lub wcale.
  • Prawdopodobnie rozpocznie się od linii shebang (#!), aby można je było rozpocząć bez określania perl.
14
ikegami 8 październik 2020, 07:07

Pliki biblioteki (zakładam, że masz na myśli require 'foo.pl' rzeczy tutaj) są przestarzałą (przed Perlem 5) formą modułu zewnętrznego. W większości przypadków nie powinieneś się już tym przejmować, chociaż nadal istnieją niektóre instalacje Perla 4, a zatem wciąż jakiś kod Perla, który pozostaje z nimi wstecznie kompatybilny (i jest trochę kodu, który jest po prostu nigdy nie został zaktualizowany i nadal ładuje getcwd.pl itd.).

7
geekosaur 16 czerwiec 2011, 21:38

Nic. Oba są plikami zawierającymi kod Perla. Oto jednak niektóre z możliwych różnic okoliczności.

  1. Plik wykonywalny perla z większym prawdopodobieństwem będzie miał shbang #!/bin/perl.
  2. Stare .pl biblioteki Perla (stąd 'p' + 'l') są prawdopodobnie wymagane niż moduły .pm.
  3. Moduły w stylu Perla 5 (.pm) częściej używają Exporter - chociaż jeszcze nowsze moduły unikają eksportowania czegokolwiek.
-1
Axeman 16 czerwiec 2011, 21:53
3
Moduł zawsze definiuje pakiet (lub nie jest modułem). biblioteka .pl zwykle tego nie robi.
 – 
hobbs
16 czerwiec 2011, 23:24
Nie wiem, co masz na myśli przez #2. .pm (tj. pliki z dyrektywą package) należy zawsze ładować za pomocą require, prawdopodobnie za pośrednictwem use. .pl (tj. pliki bez dyrektywy package) należy zawsze ładować za pomocą do.
 – 
ikegami
17 czerwiec 2011, 01:44
@ikegami, 1) Gdyby ktoś dał Ci plik .pm, czy spodziewałbyś się, że będziesz go potrzebował (lub nawet do)? A może to raczej pytanie, jeśli miałeś plik .pl. 2) Dyrektywa Package nie wchodzi w to, gdy mówimy o typach plików, ale z tych dwóch -- bardziej prawdopodobne jest, że plik .pm definiuje pakiet niż plik .pl. Tak więc jest to również w duchu różnicy praktyki w tworzeniu dwóch typów plików. Znowu sugerowana praktyka różni się od de facto--lub charakterystycznej--praktyki--z mojego doświadczenia z plikami .pl--nigdy nie widziałem kogoś do ich--celowości pomimo .
 – 
Axeman
24 czerwiec 2011, 20:38
Gdyby ktoś dał mi plik .pm, spodziewałbym się, że będzie miał dyrektywę package, a zatem spodziewałbym się, że będę mógł go załadować za pomocą require. Ja też bardziej oczekiwałbym, że plik .pm definiuje pakiet niż plik .pl, dlatego powiedziałem, że .pm powinien być zawsze ładowany za pomocą require i dlaczego powiedziałem, że .pl nigdy nie powinien być ładowany za pomocą require.
 – 
ikegami
25 czerwiec 2011, 01:41