Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

list returned from function

by hotshot (Prior)
on Jan 17, 2002 at 21:09 UTC ( #139547=perlquestion: print w/replies, xml ) Need Help??
hotshot has asked for the wisdom of the Perl Monks concerning the following question:

Hi guys !

Is there a short way to get the x entry of an array returned from a function?

# if I have the function myFunc() that returns an list # I would like to get somehow the 5 element of the list returned: $elem = myFunc()[5]; # of course that doesn't work


Replies are listed 'Best First'.
Re: list returned from function
by japhy (Canon) on Jan 17, 2002 at 21:12 UTC
    You need an extra layer of parens. $elem = (myFunc())[5];

    Jeff[japhy]Pinyan: Perl, regex, and perl hacker.
    s++=END;++y(;-P)}y js++=;shajsj<++y(p-q)}?print:??;

      In addition to japhy's excellent answer, I'd like to just point out what this is doing for anyone who might not quite understand why this works as it does.

      (my_func()) forces the output of this function into list context as well as groups it for the [5] we're about to append. Now that [5] takes a slice of the list.

      Here's a simple example
      sub foo { return qw(a b c d) } ( foo() )[1,3]; # Is the same as: ('a', 'b', 'c', 'd')[1,3]; # And effectively the same as @a = foo(); @a[1,3];
      You can read more about slicing in the book Effective Perl Programming (a *must* read =)
Re: list returned from function
by George_Sherston (Vicar) on Jan 18, 2002 at 02:43 UTC
    The preceding answers assume that MyFunc() returns an array. If it returns an array reference, as it might, you need
    sub MyFunc { my @ary = qw(a b c d e f g h i j); return \@ary; } my $foo = ${MyFunc()}[4];

    George Sherston
      Nothing wrong with the above. But I prefer:
      my $foo = (MyFunc())->[4];
Re: list returned from function
by theorbtwo (Prior) on Jan 18, 2002 at 07:04 UTC

    Above and beyond the exelent answers above, I'd just like to note that in newer perls, that works exactly as you wrote it -- it's special-cased in the source. I think the change is as of 5.6, but I can't seem to find it in the perldelta* manpages.

    James Mastros,
    Just Another Perl Scribe

Re: list returned from function
by vagnerr (Prior) on Jan 18, 2002 at 01:35 UTC
    You're nearly there...
    $elem = (myFunc())[5];
    will do it
Re: list returned from function
by thunders (Priest) on Jan 18, 2002 at 20:37 UTC
    As some of the examples above illustrate, always remember that an array index starts at zero. When you asked for the "5 element" do you mean the "5th element"?
    $elem = (myFunc())[4]; #fifth element $elem = (myFunc())[5]; #sixth element
    It may have just been a typo, but I thought I'd point it out
Re: list returned from function
by Steve_p (Priest) on Jan 19, 2002 at 02:25 UTC
    I would try:
    $elem = (myFunc())[5];
    This is what works for me when I need a single field from localtime. For example,
    $day = (localtime)[6];

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://139547]
Approved by root
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (2)
As of 2018-05-23 01:58 GMT
Find Nodes?
    Voting Booth?