List Info

Thread: Re: Single assignment to a mixture of data types




Re: Single assignment to a mixture of data types
country flaguser name
United States
2007-08-30 06:02:29

--- In perl-beginner%40yahoogroups.com">perl-beginneryahoogroups.com,
"skarlso777&quot; <Gergely_Brautigam...> wrote:
&gt;
> Hi!
>
> In my knowledge it is so that you have to turn it around. So don't
use
&gt; :> my (array,$string) = (('A','B'),'C');
&gt; Because it will always be ABC, but use it so:
> > my ($string, array) = ('C', ('A','B'));
>
> Perl flushes everything at one times. This also goes for passing
> parameters.
>
> Gergely.
>
>
> --- In perl-beginner%40yahoogroups.com">perl-beginneryahoogroups.com, "hooyar66" <pcbcad> wrote:
&gt; >
>; > I know this must be easy but Perl's syntax has confounded me
again... I
> > would expect the code
>; > below to assign the value of $string as 'C' b
> > ut instead all values are assigned to the array
&gt; > .
> >
> > How can I assign to both a string and array in one line - ideally
> > without using references.
> >
> > Thanks
&gt; > NJH
> >
> > #!c:/perl/bin/perl.exe
> >
> > use warnings;
> > use strict;
> > use diagnostics;
> >
> > my (array,$string) = (('A','B'),'C');
&gt; > print "My array is: arraynMy $string is: $stringn&quot;;
>; >
> > Produces:
> > My array is: A B C
> > My $string is:
> >
> >
> >
> >
> > [Non-text portions of this message have been removed]
> >
>;

Thanks for the reply Gergely - the example I gave was very simple
however I really need to use an assignment with multiple strings and
arrays, so this would be a better example:

my ($string, array1, array2) = ('A',('B','C'),('D','E'));
print "My $string is: $stringnMy array1 is: array1nMy array2
is: array2n&quot;;

which produces:
My $string is: A
My array1 is: B C D E
My array2 is:

Is there a way to assign multiple arrays in a single line? I actually
need to assign my values from the return of a subroutine, something
like:

my ($string, array1, array2) = &assign_vals;
print "My $string is: $stringnMy array1 is: array1nMy array2
is: array2n&quot;;

sub assign_vals{
return ('A',('B','C'),('D','E'));
}

Thanks for any help
NJH

__._,_.___
.

__,_._,___
Re: Single assignment to a mixture of data types
country flaguser name
United States
2007-08-30 06:39:57

--- In perl-beginner%40yahoogroups.com">perl-beginneryahoogroups.com, "hooyar66" <pcbcad...> wrote:
&gt;
> --- In perl-beginner%40yahoogroups.com">perl-beginneryahoogroups.com,
> "skarlso777"; <Gergely_Brautigam> wrote:
&gt; >
>; > Hi!
> >
> > In my knowledge it is so that you have to turn it around. So don't
> use
> > :> my (array,$string) = (('A','B'),'C');
&gt; > Because it will always be ABC, but use it so:
> > > my ($string, array) = ('C', ('A','B'));
> >
> > Perl flushes everything at one times. This also goes for passing
> > parameters.
> >
> > Gergely.
> >
> >
> > --- In perl-beginner%40yahoogroups.com">perl-beginneryahoogroups.com, "hooyar66" <pcbcad> wrote:
&gt; > >
>; > > I know this must be easy but Perl's syntax has confounded me
> again... I
> > > would expect the code
>; > > below to assign the value of $string as 'C' b
> > > ut instead all values are assigned to the array
&gt; > > .
> > >
> > > How can I assign to both a string and array in one line - ideally
> > > without using references.
> > >
> > > Thanks
&gt; > > NJH
> > >
> > > #!c:/perl/bin/perl.exe
> > >
> > > use warnings;
> > > use strict;
> > > use diagnostics;
> > >
> > > my (array,$string) = (('A','B'),'C');
&gt; > > print "My array is: arraynMy $string is: $stringn&quot;;
>; > >
> > > Produces:
> > > My array is: A B C
> > > My $string is:
> > >
> > >
> > >
> > >
> > > [Non-text portions of this message have been removed]
> > >
>; >
>;
> Thanks for the reply Gergely - the example I gave was very simple
> however I really need to use an assignment with multiple strings and
> arrays, so this would be a better example:
>
> my ($string, array1, array2) = ('A',('B','C'),('D','E'));
&gt; print "My $string is: $stringnMy array1 is: array1nMy array2
> is: array2n&quot;;
>
> which produces:
> My $string is: A
> My array1 is: B C D E
> My array2 is:
>
> Is there a way to assign multiple arrays in a single line? I actually
> need to assign my values from the return of a subroutine, something
> like:
&gt;
> my ($string, array1, array2) = &assign_vals;
&gt; print "My $string is: $stringnMy array1 is: array1nMy array2
> is: array2n&quot;;
>
> sub assign_vals{
> return ('A',('B','C'),('D','E'));
&gt; }
>
> Thanks for any help
>; NJH
>

Hi!

The problem is that arrays are greedy. So they swallow up pretty much
everything they come into contact with.

So if you have to return two or more arrays best it's using references
like:

sub function {
my $scalar;
my array1;
my array2;
..
.
.

return ($scalar, array1, array2);

}

Then use this like:
my ($first, $second, $third ) = function();

Notice i did not use second i used $second. Because this will contain
the reference to the array you have to cast it into array to use it.

Hope that helps,
Gergely.

__._,_.___
Recent Activity
Visit Your Group
Yahoo! Finance

It's Now Personal

Guides, news,

advice & more.

Search Ads

Get new customers.

List your web site

in Yahoo! Search.

Find Enlightenment

Yoga groups and

resources on

Yahoo! Groups.

[1-2]

about | contact  Other archives ( Real Estate discussion Medical topics )