in reply to The correct way to return arrays from a module

There are problems with your calling method. While testing/debugging, I suggest you make 2 calls:

my $ro_itiv_hw = new Itiv::Hw; # do any testing on $ro_itiv_hw my ($ra_cols, $ra_hw) = $ro_itiv_hw->all_hw($dbh, $filter); # now test return values

Note that the instantiation could also have been written:

my $ro_itiv_hw = Itiv::Hw->new;

Also note that the all_hw() method returns two arrayrefs NOT two arrays.

When you're finished testing, you can chain the two commands again BUT you should use this syntax:

my ($ra_cols, $ra_hw) = Itiv::Hw->new->all_hw($dbh, $filter);

Also note how I prefix the references with 'ro_' for reference to object and 'ra_' for reference to array. Not shown here but I also use rs, rh, rc, rg for references to scalars, hashes, code and globs respectively. You will save yourself a lot of time debugging if you differentiate between references and ordinary scalar variables (e.g. strings, numbers). This scheme is what I use: use it, use someone else's or make up your own. I strongly recommend you use some method along these lines.

Regards,

PN5

Replies are listed 'Best First'.
Re^2: The correct way to return arrays from a module
by qq (Hermit) on Aug 07, 2004 at 22:18 UTC

    What do you do when you have a reference to complex data structure, like a hash of arrays of objects...?

    qq

      If you mean in terms of prefix usage, the answer is nothing more than already described. I did consider extending this prefix set quite a few years ago but decided it was not useful. In cases where I think confusion is possible, I simply use the remainder of the name to disambiguate. As a last resort, in cases of extreme comlexity, I use comments to describe the complete structure.

      The main point is that the following should be known to be correct syntax:

      $rh_abc->{def} $ra_ghi->[jkl] $rc_mno->('pqr')

      from inspection of the variable name. Without the prefixes, inspection of the code where the data originated (often in a separate module) is required.

      Regards,

      PN5