On Thu, 30 Sep 2004 20:19:11 +0100, Graeme McLaren <[EMAIL PROTECTED]> wrote: > Hi all, I'm having a look in to object oriented perl. Can anyone tell me > what the difference between @_ and shift is? As far as I know there is no
Straight from "the Llama" : @array = qw /dino fred barney/; $a = $shift @array; # $a gets "dino", @array reduced to ("fred" , "barney"); > 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? @_ variable is local to the subroutine. It stores argument to a subroutine. If u keep on doing "shift" inside a subroutine then @_ will be empty & will become uninitialized again. sub test { #$a = shift ; my $a = shift @_ ; print $a; my $b = shift @_; print $b; } &test(1); ->perl -w test.pl ->Use of uninitialized value in print at test.pl line 9. 1 But this doesn't in anyway affect the @_ variable outside the subroutine if there happens to be any. > 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}; > } > ####################################### > [snip] "$self" looks alot like "this" in Java.. no? :) -- Cheers, SanoBabu -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>