in reply to Re^2: undefined value in array reference
in thread undefined value in array reference

At the time of the dereference, the $y-th value of @aob is empty. It's certainly possible for the $y-th value to be empty when the $x-th value is not - $x just has to be less than $y. Perhaps you really mean my @row  = @{$aob[ $x ]};? This sounds very much like an indexing error. A readthrough of perlreftut/perldsc might be helpful.

Otherwise, I'll need to see your issue in broader context - a complete script with sample input and intended/desired output, all wrapped in <code> tags would be ideal.

Replies are listed 'Best First'.
Re^4: undefined value in array reference
by Dandello (Monk) on Mar 31, 2011 at 21:43 UTC

    Well, in this particular set of data, $x maxes out at 500 and $y maxes out at 10,000. So yes, it's an indexing issue related to @{$aob[ $y - 1 ]} but nothing I've read points to a simple one-line solution that actually produces the proper output.

    As is my usual, my current solution is a little sideways. In the section above calling popnum3:

    foreach my $r (0 .. $total){ $row[$r] = $aob[$r][$y - 1]; } my @rowin = grep { $_ ne q{} } @row; $mean = mean(@rowin);
    then
    sub popnum3 { my ( $x, $y, $z, $mean ) = @_; $aob[$x][$y] = $mean * ( 1 + $z ); return $aob[$x][$y]; }

    Supposedly @row = @{$aob[ $y - 1 ]} should be equivalent to

    foreach my $r (0 .. $total){ $row[$r] = $aob[$r][$y - 1]; }
    But it didn't work out that way.

    BTW, the grep is in there since I know that although the current parameters shouldn't produce any blanks in the output, other parameters will.

      So you are trying essentially to strip out the $y - 1 column, assuming your AoA is $aob[row][column]? In that case, your code might look like:

      my @row = map $_->[$y - 1], @aob;

      If not, I'm really lost as to the spec.

        YES! - well, it's actually mapping out as $aob[column][row] But that's a minor issue that's all though the whole project. Maybe my conventions are a little off from everyone else's. Wouldn't be the first time.

        Be that as it may my @row = map $_->[$y - 1], @aob; gives me proper results in the output without resorting to a foreach loop.

        Thank You