jahero has asked for the wisdom of the Perl Monks concerning the following question:
Hello wise monks!
I would like to ask a (probably) newbie question in regards to namespaces and names collisions.
Lets say that I have something like this in my code (shortened, incomplete).
package Something::BufferedRead; use strict; use warnings FATAL => 'all'; use File::Basename; our $VERSION = 1.00; my $BUFFER_SIZE = 1048576; sub new { my $class = shift; my @data = @_; my $self = {}; bless $self, $class; return $self; } sub basename { my $self = shift; return basename($self->{cfg}->{filename}); }
Now this fails to compile since 'basename' collides with name of sub imported from module File::Basename. Obvious solution would be to change name of my sub, for example to 'base_name', however I want to understand what exactly is going on, and how to prevent this from being pain in the future.
Which leads me to the real question.
- Is there aby way how to prevent File:::Basename->basename from becoming a member of Something::BufferedRead namespace?
- How exactly does one influence what is imported from the module used? I am sure this has something to do with Exporter module and/or import methods, but details slip from grasp.
- What mechanism could I use to be able to declare 'basename' sub in my sub, and still have File::Basename->basename at my disposal?
Thank you for your time!
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Namespaces & colliding names
by Athanasius (Archbishop) on Nov 08, 2016 at 08:24 UTC | |
by Anonymous Monk on Nov 08, 2016 at 09:15 UTC | |
Re: Namespaces & colliding names
by kcott (Archbishop) on Nov 08, 2016 at 09:26 UTC | |
by jahero (Pilgrim) on Nov 08, 2016 at 09:34 UTC | |
Re: Namespaces & colliding names
by shawnhcorey (Friar) on Nov 08, 2016 at 14:18 UTC | |
by jahero (Pilgrim) on Nov 09, 2016 at 08:29 UTC |
Back to
Seekers of Perl Wisdom