shift removes the first variable from the parameter-list, which is then assigned to the (arbitrarily-named) local variable self to provide access to the object. Many object programming languages use the technique of "a hidden first-parameter." Perl just does so explicitly.