in reply to Re^3: Returning arrays from a package (feature qw/refaliasing/;)
in thread Returning arrays from a package

> such that tst2 is actually returning a flat list of arrayrefs, rather than multiple lists.

> > well the OP is trying to return multiple array-refs not lists,

> > > >  return(\@overall,\@electronics,\@safety);

And passing references is the canonical answer to this question.

Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

Replies are listed 'Best First'.
Re^5: Returning arrays from a package
by jcb (Parson) on Oct 02, 2019 at 23:41 UTC

    Indeed, the OP's function does that, but OP attempts to accept them as multiple arrays at line 23: my (@overall, @electronics, @safety) = breakouts(@products)­;

    This mixing of metaphors needs to be fixed one way or the other, and I suggest that, since OP wants to export globals, the right way to fix it is to directly load the globals instead of creating lexicals to shadow them. I am surprised that perl does not warn about this; OP does use warnings;.

    This also leads to a third option, which is the C way of passing references to breakouts and having it populate the arrays passed as arguments, but I think the oft-seen quip "Keep It Simple, Stupid" applies here: breakouts is not some general function, but sorts specifically this data into these bins. A better architecture would involve replacing the whole thing with an SQL database (start with DBI and DBD::SQLite and move up to DBD::Pg when needed) but OP seems to want these arrays for some reason.