Indexing directly into returned array in Perl
This question has b开发者_高级运维een 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.
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.
精彩评论