in reply to Strangness with arrays

Your first problem is your do { ... }. It is returning 0, because the last thing evaluated is NOT the $ave += $_, but rather the false value returned by for to indicate it's finished. $ave = do { $ave += $_ for @array; $ave } / @array; is a fix, or (if you don't mind lots of divisions): $ave += $_/@array for @array; So no, $ave does NOT have a different value elsewhere in your program -- your array happens to be perfectly distributed, and if you used (1, 1, 2, 3, 5, 8, 13, 21, 34), you'd find you get bizarre different results.

The next problem is you meddling with the array while you loop over it. Don't. Do something like this instead: push @{ $_ < $ave ? \@lower : \@higher }, $_ for @array;

_____________________________________________________
Jeff[japhy]Pinyan: Perl, regex, and perl hacker, who'd like a job (NYC-area)
s++=END;++y(;-P)}y js++=;shajsj<++y(p-q)}?print:??;

Replies are listed 'Best First'.
Re: Re: Strangness with arrays
by BrowserUk (Patriarch) on Jul 10, 2002 at 20:39 UTC

    Thanks japhy for both the explainations and the especially the alternatives.


    Anyone know of an abbottoire going cheap?