in reply to Module mechanics question
If foo wants to use Modern::Perl, then foo better 'use Modern::Perl;' (or require...). If foo isa bar, and bar uses Modern::Perl, then it's merely a coincidence that foo can access Modern::Perl, and must not be depended upon. Same goes for export/import. If bar imports everything from Modern::Perl, and re-exports it, then foo imports everything from bar, then foo is still using bar, and should not assume anything about Modern::Perl.
If you code all of your dependencies into bar, and then restructure foo not to use bar, foo breaks. You'll have to sift through it all and figure out what foo really used that bar magically provided. Magic is bad. @EXPORT is bad for similar reasons... not explicitly specifying what symbols come from where in every package leads to lots of guesswork for future maintainers, and guesswork leads to bugs.
--Dave
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Module mechanics question
by yitzchak (Sexton) on Aug 12, 2011 at 23:51 UTC | |
Re^2: Module mechanics question
by Logicus (Initiate) on Aug 12, 2011 at 20:32 UTC |