in reply to Re: Splitting array into two with a regex
in thread Splitting array into two with a regex

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.

  • Comment on Re^2: Splitting array into two with a regex

Replies are listed 'Best First'.
Re^3: Splitting array into two with a regex
by reasonablekeith (Deacon) on Nov 08, 2005 at 15:39 UTC
    $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.
Re^3: Splitting array into two with a regex
by ikegami (Patriarch) on Nov 08, 2005 at 16:01 UTC
    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.

      @{$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.

      -- Randal L. Schwartz, Perl hacker
      Be sure to read my standard disclaimer if this is a reply.

        Can you back that up? I can't find any way of using it as an lvalue. Everything I tried gave me a count (in scalar context) or a list (in list context). Some tests:

        Are you talking about guts? I don't know anything about those. I was talking about the language.