Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling

Re^2: undefined value in array reference

by Dandello (Monk)
on Mar 31, 2011 at 18:55 UTC ( #896700=note: print w/replies, xml ) Need Help??

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

Okay, using KennethK's snippet above gives : uncaught exception from user code; snip ('4\x{a}501\x{a}\0\x{a}', '$VAR1 = undef;\x{a}')

Now the row I'm trying to get has already been printed into the data file. But running through every row in the file seems a little memory consuming when the same data should be in the array.

What seems to be happening is is  @{$aob[ $y - 1 ]} just isn't getting me the row from the array.

In a different subroutine I have $aob[$x][ $y - 1 ] and there are always values there and it works properly - it's getting that entire row ($y - 1) into a separate array so I can get the mean of the row that's giving me problems.

The code for getting the row comes from Dennis's Quick Guide and I haven't found that particular algorithm anywhere else.

It would be nice to get the row algorithm to work as a one-liner. But it would be even nicer to just get it to work.

Replies are listed 'Best First'.
Re^3: undefined value in array reference
by kennethk (Abbot) on Mar 31, 2011 at 19:09 UTC
    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.

      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);
      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.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://896700]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (8)
As of 2019-10-17 08:34 GMT
Find Nodes?
    Voting Booth?