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]