Agreed, but I say playing nicely is a practice that does not scale.
If you won't distribute the code there is nothing wrong
with using AUTOLOAD.
I am saying that AUTOLOAD does not scale well. Every
use of AUTOLOAD in a program should be under the control of one party.
If two separate authors use AUTOLOAD in the same program
breakage is likely.
Being conservative, I would be suspicious of any program with
more than one AUTOLOAD. If
two AUTOLOAD routines exist in a hierarchy there is a problem. (Don't forget UNIVERSAL.)
This is a known problem.
Consider:
#!/usr/bin/perl
use strict;
use warnings;
# I decide to use a module
package Vehicle;
use vars '$AUTOLOAD';
sub new { return bless {}, $_[0]; }
# handle all "V*" calls
sub AUTOLOAD {
my ($key) = $AUTOLOAD =~/::(\w+)/;
return if $key =~ /^[A-Z]+$/;
die "Vehicle::AUTOLOAD can't cope as $key"
unless $key =~ /^[vV]/;
print "Leaving Vehicle::AUTOLOAD as $key$/";
}
# with my program below
package Animal;
use vars '$AUTOLOAD';
sub new { return bless {}, $_[0]; }
# handle all "A*" calls
sub AUTOLOAD {
my ($key) = $AUTOLOAD =~/::(\w+)/;
return if $key =~ /^[A-Z]+$/;
die "Animal::AUTOLOAD can't cope as $key"
unless $key =~ /^[aA]/;
print "Leaving Animal::AUTOLOAD as $key$/";
}
package Horse;
use vars qw/ @ISA /;
@ISA = qw/ Vehicle Animal /;
package main;
# the two usages cannot work together, I needed to
# know that Vehicle used AUTOLOAD so I could avoid it
# or rewrite my code to eliminate AUTOLOAD.
my $h = Horse->new;
$h->Veh();
$h->Ani(); # call intercepted by Vehicle AUTOLOAD
Be well.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|