How can I pass an array resulting from a Perl method by reference?

Posted by arareko on Stack Overflow See other posts from Stack Overflow or by arareko
Published on 2010-06-12T03:20:26Z Indexed on 2010/06/12 13:52 UTC
Read the original article Hit count: 173

Filed under:
|

Some XML::LibXML methods return arrays instead of references to arrays.

Instead of doing this:

$self->process_items($xml->findnodes('items/item'));

I want to do something like:

$self->process_items(\$xml->findnodes('items/item'));

So that in process_items() I can dereference the original array instead of creating a copy:

sub process_items {
    my ($self, $items) = @_;
    foreach my $item (@$items) {
        # do something...
    }
}

I can always store the results of findnodes() into an array and then pass the array reference to my own method, but let's say I want to try a reduced version of my code. Is that the correct syntax for passing the method results or should I use something different?

Thanks!

EDIT:

Now suppose I want to change process_items() to process_item() so I can do stuff on a single element of the referenced array inside a loop. Something like:

$self->process_item($_) for ([ $xml->findnodes('items/item') ]);

This doesn't work as process_item() is executed only once because a single value is passed to the for loop (the reference to the array from findnodes()). What's the proper way of using $_ in this case?

© Stack Overflow or respective owner

Related posts about perl

Related posts about reference