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?
Es gibt keine eindeutige Definition für Pragma. Am nächsten zu etwas Offiziellem ist perlpragma .
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!)
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.
Tags und Links perl