Shift removes the first element of the array it is passed...so, take the example:
my @arr = (1, 2, 3, 4); my $val = shift @arr; my $val2 = shift @arr; print "\$val = $val\n"; print "\$val2 = $val2\n"; print "\@arr = @arr\n" This will print out $val = 1 $val2 = 2 @arr = 3 4 As you can see, shift removed the first element of the array and returned it as its value. Now, if shift is called without an argument, it uses the default argument @_. Convieniently, arguments to a function are passed using @_. So, if you call a function: f( $var1, $var2 ); then inside f, $_[0] is the value of $var1 and $_[1] is the value of $var2. In your specific case, Somefunction($var1, \@arry); then $_[0] will be the value of $var1, and $_[1] will be a reference to @arry. If, inside Somefunction, you write my $var = shift; then $var will be the value of $var1 After that, if you write my $var2 = shift; then $var2 will be an array reference to @arry. HTH, Tanton ----- Original Message ----- From: "Steven M. Klass" <[EMAIL PROTECTED]> To: "Brett W. McCoy" <[EMAIL PROTECTED]> Cc: <[EMAIL PROTECTED]> Sent: Tuesday, February 12, 2002 4:20 PM Subject: Re: Arrays 1x3 or 3x1 - The real questions > how does "shift" work? In other words what if I do this > > &Somefunction($var1, \@arry) > > sub SomeFunction { > my $var = $_[0] > my $array = shift; > foreach(@{$array}) { > print "$_\n"; > } > } > > How does the shift operator know which is which? I called it specifically > earlier, because of this. What am I missing? > > Thanks so much > > On Tuesday 12 February 2002 10:06 am, Brett W. McCoy wrote: > > On Tue, 12 Feb 2002, Steven M. Klass wrote: > > > Let's start off with some simple code.. > > > > > > my $arg = &SomeFunction ( my @arry = qw/one two three/) > > > > > > > > > > > > sub SomeFunction { > > > my @array = @_[0]; > > > > No, you are only grabbing the first element of @_. You should either pass > > the array as a reference (best way), or just grab up the entire @_. > > Keep in mind that if you pass an array and any scalars as arguments, they > > will all be flattened out into @_, as a single list. This is why passing > > a reference is better, to differentiate lists and scalars. > > > > SomeFunction([qw(one two three)]); > > > > sub SomeFunction { > > my $array = shift; > > foreach(@{$array}) { > > print "$_\n"; > > } > > } > > > > -- Brett > > http://www.chapelperilous.net/ > > ------------------------------------------------------------------------ > > Removing the straw that broke the camel's back does not necessarily > > allow the camel to walk again. > > -- > > Steven M. Klass > Physical Design Manager > > National Semiconductor Corp > 7400 W. Detroit Street > Suite 170 > Chandler AZ 85226 > > Ph:480-753-2503 > Fax:480-705-6407 > > [EMAIL PROTECTED] > http://www.nsc.com > > > -- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]