Just to document an adaptation on Cody's approach, that I´ve just tested with success:
Instead of
sub half {
my $number;
if (ref($_[0]) eq 'MyPackage') {
my $self = shift();
$number = shift();
} else {
$number = shift();
}
return $number / 2;
}
We can make the adaptation of all perl4-ish functions possible just by adding a single line, on the top of each function's code:
sub half {
if (ref($_[0]) =~ /MyPackage/ ) { my $self = shift; }
# as the former Perl4-like functions don´t need the $self object, this
+ line's role is to clean up the first element of the @_ array! And, s
+o, make things ready for the shifts your code already is set to!
my $number = shift;
return $number / 2;
}
Detail: I call all my methods libraries MyPackage, Mypackage2 etc, so by testing with this regexp, I don't even have to worry to adapt this one-line according to the library I´m converting into module! Just adding it all over the subs, and finally enter the OO world!