in reply to feedback on subroutine as both function and method in one
Just for fun, this is how CGI goes about doing it:
So, perhaps I can go as far as saying that everything inside CGI is treated as an object, no matter how you call it.
-Eric
The very first thing done when a sub is called is to test the parameters passed to it.. to see if it's being called as a function or method. Now, if I'm reading this correctly, it would seem that if it's not being called as an object method, then it is turned into an object. Otherwise, it leaves it alone and returns the parameters as is (leaving it as an object).sub param { my($self,@p) = self_or_default(@_); blah blah... } sub self_or_default { return @_ if defined($_[0]) && (!ref($_[0])) &&($_[0] eq 'CGI'); unless (defined($_[0]) && (ref($_[0]) eq 'CGI' || UNIVERSAL::isa($_[0],'CGI')) # sli +ghtly optimized for common case ) { $Q = $CGI::DefaultClass->new unless defined($Q); unshift(@_,$Q); } return wantarray ? @_ : $Q; }
So, perhaps I can go as far as saying that everything inside CGI is treated as an object, no matter how you call it.
-Eric
In Section
Seekers of Perl Wisdom