Could you explain what does it mean @{$rec->vals}. Is it array ref? Could you give me an example of datastructure how it will look like. I am eager to learn the concept.
| [reply] |
$rec->vals we can presume is some OO code, but's it's not defined by the OP.
What Fletch is doing here is testing the value returned by $rec->val, and according to the result, returning a reference to one of the two arrays. This whole things is wrapped in a @{ } which will deference the array ref returned in the first instance, which he can then push the value to.
Here's a slightly less complicated version, using the same principal
use strict;
use Data::Dumper;
my @numbers = (1,2,3,45,6,76,8,5,7,8);
my(@odd, @even);
foreach my $number (@numbers) {
push @{ is_odd($number) ? \@odd : \@even}, $number;
}
print Dumper(\@odd, \@even);
sub is_odd {$_[0] % 2}
---
my name's not Keith, and I'm not reasonable.
| [reply] [d/l] |
Could you explain what does it mean @{$rec->vals}.
@{$rec->vals}
can be written as
@{$rec->vals()}
or as
my $aref = $rec->vals();
@{$aref}
Is it array ref?
$rec->vals() is an expression that returns an array reference.
@{$rec->vals()} is an expression that returns an array lvalue (which means it can be used like a real array).
Update: Fixed problem noted by merlyn.
| [reply] [d/l] [select] |
@{$rec->vals()} is an expression that returns a list.
Well, technically, it's an lvalue array expression, which when used as an rvalue in a list context, returns a list. When its used in a scalar context, it returns the length of the list. When it's used as an lvalue, it's an array.
| [reply] [d/l] |