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:47:09

--- In perl-beginner%40yahoogroups.com">perl-beginneryahoogroups.com,
"skarlso777&quot; <Gergely_Brautigam...> wrote:
&gt;
> --- 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:
> > > >
>; > > > 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:
&gt;
>
> sub function {
> my $scalar;
> my array1;
> my array2;
> ..
> .
> .
>
> return ($scalar, array1, array2);
>
>
>
> }
>
> Then use this like:
&gt; 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.
&gt;
> Hope that helps,
&gt; Gergely.
>

I already got things to work by using references - I was just hoping
that I could avoid them to keep things nice and simple... thanks!

__._,_.___
.

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

--- 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; >
>; > --- 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:
&gt; >
> >
> > sub function {
> > my $scalar;
> > my array1;
> > my array2;
> > ..
> > .
> > .
> >
> > return ($scalar, array1, array2);
> >
> >
> >
> > }
> >
> > Then use this like:
&gt; > 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,
&gt; > Gergely.
> >
>;
> I already got things to work by using references - I was just hoping
> that I could avoid them to keep things nice and simple... thanks!
>

No problem. Sadly there is no other way. At least no other i know
off... )

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.

Yoga Groups

Find Enlightenment

&amp; exchange insights

with other members

Re: Re: Single assignment to a mixture of data types
country flaguser name
United States
2007-08-30 09:42:03

>>&gt;>> "hooyar66" == hooyar66 < pcbcad%40hotpop.com">pcbcadhotpop.com> writes:

hooyar66> I already got things to work by using references - I was just hoping
hooyar66> that I could avoid them to keep things nice and simple... thanks!

Perl doesn't have "lists of lists";, so you must delve into references to
make lists of arrayrefs to get what you want.

A function is invoked in either scalar context (single item returned) or list
context (one flat list of items returned). That's all you get.

--
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<; merlyn%40stonehenge.com">merlynstonehenge.com> <URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.
See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!

__._,_.___
.

__,_._,___
[1-3]

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