Indexing directly into returned array in Perl

This question has been asked about PHP both here and here, and I have the same question for Perl. Given a function that returns a list, is there any way (or what is the best way) to immediately index into it without using a temporary variable?

For example:

my $comma_separated = "a,b,c";
my $a = split (/,/, $comma_separated)[0]; #not valid syntax

I see why the syntax in the second line is invalid, so I'm wondering if there's a way to get the same effect without first assigning the return value to a list and indexing from that.

Answers


Just use parentheses to define your list and then index it to pull your desired element(s):

my $a = (split /,/, $comma_separated)[0];

Just like you can do this:

($a, $b, $c) = @array;

You can do this:

my($a) = split /,/, $comma_separated;

my $a on the LHS (left hand side) is treated as scalar context. my($a) is list context. Its a single element list so it gets just the first element returned from split.

It has the added benefit of auto-limiting the split, so there's no wasted work if $comma_separated is large.


Need Your Help

Firebug for Chrome

javascript ajax debugging browser google-chrome

Can anyone recommend a decent extension to Google Chrome that is similar to Firebug? I did see that there are a couple of similar questions here on SO, but the answers seem to be very dated.

Creating a setError() for the Spinner

android spinner

How do you create the setError() (similar to that of a TextView/EditText) function for a Spinner? The following doesn't work: