sub half { my $number; if (ref($_[0]) eq 'MyPackage') { my $self = shift(); $number = shift(); } else { $number = shift(); } return $number / 2; } #### 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, so, make things ready for the shifts your code already is set to! my $number = shift; return $number / 2; }