#(1) Via Object: (Does not use data from $self) $self->myUtility(@params); #(2) Via Class: Utility->myUtility(@params); #(3) Via Child Class: SomeOtherClass->myUtility(@params); #(4) Via direct call to function (Not OOPic) myUtlity(@params); #### sub myUtlity { #1) Does not deal with case (2), expensive, unneeded stack change shift if(blessed($[0])); #2) Does not scale well to multiple params, does not handle a param like the value "0" my ($self, $param) = @_; $param ||= $self; }