Warum erlaubt Perl gemeinsame "Benutzungs" -Beziehungen zwischen Modulen?

8

Nehmen wir an, es gibt zwei Module, die sich gegenseitig nutzen:

%Vor%

Ich denke, dass es systematisch falsch ist, einen Code wie den obigen zu schreiben, weil die beiden Module sich gegenseitig den Code endlos kopieren, aber ich kann den folgenden Code erfolgreich ausführen, was mich sehr überrascht. Kann jemand von euch mir das alles erklären?

%Vor%     
Haiyuan Zhang 18.06.2010, 09:03
quelle

3 Antworten

15
  

weil die beiden Module gegenseitig den Code für sich selbst kopieren

Nein, das werden sie nicht, wie Sie mit dem Code gezeigt haben, der Sie bei der Arbeit überrascht hat. Perl speichert einen Datensatz in %INC , von dem Module mit use oder require geladen wurden, und versucht nicht, sie erneut zu laden, wenn sie use d oder require d erneut erhalten.

    
Dave Sherohman 18.06.2010, 09:36
quelle
9

Es gibt (mindestens) drei verschiedene Arten, etwas zu laden: use , require und do .

use ist im Grunde ein pimped require und perldoc Status für require : erfordern Anforderungen, dass eine Bibliotheksdatei enthalten sein sollte, wenn sie nicht bereits enthalten ist. Also kein Problem dort.

do ist eine andere Geschichte. Es führt die Datei aus und ist mehr oder weniger wie eval oder C #include . Gegenseitige Einbeziehung über do sollte tödlich sein.

    
musiKk 18.06.2010 09:26
quelle
7

Soweit ich mich erinnere, überprüft die Perl-Anweisung "use", ob das Modul bereits geladen ist. Es wird getan, indem man die Funktion require () aufruft. Also, es gibt keine endlose Kopie.

    
pmod 18.06.2010 09:09
quelle

Tags und Links