Alexander (HH): Export, Export und nochmals Export

Beitrag lesen

Moin Moin!

Ein kleiner Haken ist bei @ISA=qw(Exporter) allerdings dabei: Hier findet eine Vererbung statt. Das ist meistens unproblematisch, aber nicht immer (Man darf z.B. keine Routinen definieren, die den selben Namen wie benutzte Routinen des Exporter-Moduls haben). In aller Regel möchte man seinem Modul nur die import-Routine des Exporter-Moduls hinzufügen, und nicht ALLE Routinen des Exporter-Moduls.

Außerdem arbeitet require Exporter; erst zur Laufzeit. Dazu besteht keine notwendigkeit, das Exporter-Modul kann (und sollte) bereits zur Compile-Zeit mit use Exporter; geladen werden, genauer mit use Exporter qw(import);.

So wird wirklich nur die import()-Routine aus dem Exporter-Modul in das eigene Modul geladen, ohne dass es zu Problemen mit Routinen-Namen kommt.

perldoc Exporter schleppt leider auch immer noch die require-Variante mit sich herum. Good Practices sollte man lesen, leider wird auch hier noch fröhlich von Exporter geerbt, ohne auf die Seiteneffekte deutlich hinzuweisen. Exporting without inheriting from Exporter erklärt halbwegs, warum man immer noch Vererben empfiehlt: Vor Exporter 5.57 (Perl 5.8.3 -- Januar 2004) ging es nicht anders.

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".