So basically this > 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.
works in order. The first shift grabs the first variable, the second grabs the second, and so on? I think I can.. I think I can.. Thanks again. On Tuesday 12 February 2002 02:33 pm, Tanton Gibbs wrote: > 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] -- 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]