> Hi all, I'm having a look in to object oriented perl. Can anyone tell me > what the difference between @_ and shift is?
One is a variable, one is function/operator ;-).... As far as I know there is no > difference except "shift" removes the parameter from the @_ array so if you > were to "shift" all parameters passed to a function nothing would be > containted in @_ is this correct? > @_ is just a special Perl variable, it so happens that it is what is used to store the arguments to a subroutine temporarily (it has other uses, see perldoc perlvar). It also happens that the first argument to a subroutine acting like a method is always the object/class that the method is invoked on. C<shift> is just a function that removes the first/top element of an array, any array, in OOP or not. This happens to make things very convenient, aka in most methods you will want to remove the instance/class from the argument list to get the actual argument list back, and shift by itself will default to use @_. So essentially you are left with some syntactic sugar to make life easier. So, my $self = shift; Just says to grab the instance from @_ (by default), store it in $self, and restore the arg list to what the user actually passed. You don't *have* to do it, but it is very convenient. > I'm asking because I'm a little confused about using it. Why can't I do > this: > > ####################################### > sub nickname { > my $self = shift; > return $self->{NICK}; > } No reason you can't. Provided you have already set $self->{NICK} or don't mind getting an undefined value. > ####################################### > > But I can do this: > > ####################################### > sub nickname { > my $self = shift; > if (@_) { $self->{NICK} = shift > } > return $self->{NICK}; > } > ####################################### > Only difference here is that you set $self->{NICK} in the event that an argument was passed, aka after shift'ing there is still an argument in @_ (namely the value you want to set NICK to). Additional suggested reading: perldoc perlboot perldoc perltoot perldoc perltooc http://danconia.org -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>