Was macht ein Modul zu einem pragmatischen Modul?

8

Ich schaue mir die Quelle von base.pm in der Perl-Distribution an, und ich sehe nicht, was sie von einem "nicht-pragmatischen" Modul unterscheidet. Wenn use base ein "Pragma" ist, unterscheidet es sich in irgendeiner Weise grundlegend von use Foo , wobei Foo irgendein Modul ist?

    
gcbenison 14.03.2013, 22:06
quelle

2 Antworten

7

Es gibt keine eindeutige Definition für Pragma. Am nächsten zu etwas Offiziellem ist perlpragma .

  • Sie ändern normalerweise die Sprache oder das Verhalten des Parsers.
  • Ihre Wirkung ist normalerweise lexikalisch begrenzt.

Ich persönlich glaube, das sind Anforderungen (und es scheint, dass Perlpragma auch tut), aber Kernmodule vars und Subs sind dokumentiert als Pragmas, obwohl ihre Wirkung nicht lexikalisch ist.

Basis und lib entsprechen keinem der Kriterien. Was sie tun ist, Informationen an "Perl selbst" zu liefern. Ich denke, das qualifiziert sich auch als Pragma.

Ich halte mein Modul use syntax qw( loop ); für pragmatisch. (Schamloser Stecker!)

    
ikegami 14.03.2013, 22:18
quelle
1

Obwohl der Name oft in vielen Kontexten verwendet wird, denke ich normalerweise an ein Pragma als etwas, das den Hinweis hash %^H verwendet, wie in perldoc perlpragma . Dies bedeutet, dass der Hauptunterschied dann ist, dass die Aktion zur Kompilierzeit sein muss; use funktioniert, während require (nicht in BEGIN) nicht funktioniert. Dies ist ein wesentlicher Unterschied zwischen einem "pragmatischen Modul" (nach dieser Definition) und anderen Modulen. Nach dieser Definition sind keine von vars , subs , base oder lib Pragmas.

    
Joel Berger 15.03.2013 01:37
quelle

Tags und Links