2013-03-14 17 views
8

Sto osservando la fonte di base.pm nella distribuzione Perl e non vedo cosa lo distingua da un modulo "non pragmatico". Se use base è un "pragma", è fondamentalmente diverso in qualsiasi modo da use Foo dove Foo è un qualsiasi modulo?Cosa rende un modulo un modulo pragmatico?

risposta

7

Non esiste una definizione solida per pragma. Il più vicino a qualcosa di ufficiale è in perlpragma.

  • Di solito modificano la lingua o il comportamento del parser.
  • Il loro effetto è generalmente in ambito lessicale.

Credo personalmente questi sono requisiti (e sembra che perlpragma non troppo), ma moduli di base vars e subs documentate essere pragmas anche se il loro effetto non è lessicale scope.

base e lib non corrispondono a nessuno dei criteri. Quello che fanno è fornire informazioni a "Perl stesso". Suppongo che si qualifichi anche come un pragma.

Ritengo che il mio modulo use syntax qw(loop); sia pragmatico. (Plug spudorato!)

+0

Dimenticato per coprire effettivamente base.pm. Indirizzata questa omissione. – ikegami

+0

Il mio commento è diventato una risposta a se stante :-) –

1

Mentre il nome è spesso utilizzato in molti contesti, di solito penso a un pragma come qualcosa che utilizza l'hash di suggerimenti %^H come documentato in perldoc perlpragma. Ciò significa che la principale differenza è che l'azione DEVE essere in fase di compilazione; use funziona mentre require (non in BEGIN) no. Questa è una differenza fondamentale tra un "modulo pragmatico" (con questa definizione) e altri moduli. Con questa definizione nessuno di vars, subs, base o lib sono pragmi.

Problemi correlati