in reply to to calculate mean and variance
couple general suggestions:
Here's a little refactoring example, too, to demo several more "perlish" constructs:
- use strict; At first, it'll generate a bunch of errors for you for undeclared variables, but it will help identify & reduce errors.
- Add some debugging statements. (Data::Dumper can be quite helpful, too)
e.g. the warnings indicate that one of the values it's trying to add to the sum is a string .. so in the first for loop put something like print Dumper [$i, $fields[$i]] if $fields[$i] =~ /s/;
Here's a little refactoring example, too, to demo several more "perlish" constructs:
#!/usr/bin/perl -w use strict; my @sum; my @sumsq; my $n = 0; while( <DATA> ){ my @fields = split / /; foreach my $i ( 0..$#fields ){ $sum[$i] += $fields[$i]; $sumsq[$i] += $fields[$i]**2; } $n++; } $_ /= $n for @sum, @sumsq; my @stddev = map { sqrt( $sumsq[$_] - $sum[$_]**2 ) } 0 .. $#sum; print join(" ", @stddev) . "\n"; #foreach my $i ( 0 .. $#sum ){ # printf "%5s %10s %10s\n", $i, $sum[$i], $stddev[$i]; #} __DATA__ 1.8 2.5 3.8 1.9 -3.5 -3.5 3.2 -3.9 4.2 4.5 2.8 -1.3 -0.9 -0.7 -0.4 -0.8 -3.5 -3.5 -1.6 -4.5
In Section
Seekers of Perl Wisdom