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

While we are nitpicking, I will note that the experimental refaliasing feature seems to just make references into lvalues, such that tst2 is actually returning a flat list of arrayrefs, rather than multiple lists. You still cannot return multiple lists in Perl. Oh, and did I mention it is an experimental feature? :-)

Replies are listed 'Best First'.
Re^4: Returning arrays from a package
by LanX (Saint) on Oct 02, 2019 at 11:38 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.