your code included:
[...]
# read one byte
read($fh, $buffer, 1);
if(defined($buffer)) {
# get an unsigned char
my $v = unpack("C", $buffer);
# sum the squared distance from the theoretical mean
$sse += ($v-127.5)**2;
$cnt++;
} else {
print "No byte here\n";
}
[...]
The ELSE condition does not show up a single time:
OUTPUT:
root@node:/srv/perl# ./dba2.pl
dbFSrms: -20.9475641203622, dba: 89.0524358796378
dbFSrms: -21.662467195052, dba: 88.337532804948
dbFSrms: -21.5176778028847, dba: 88.4823221971153
dbFSrms: -24.4135001203418, dba: 85.5864998796582
dbFSrms: -23.0140885363105, dba: 86.9859114636895
dbFSrms: -18.5448040737999, dba: 91.4551959262001
dbFSrms: -21.636493545482, dba: 88.363506454518
dbFSrms: -20.3636900956917, dba: 89.6363099043083
dbFSrms: -21.3307953726968, dba: 88.6692046273032
dbFSrms: -22.1928440805489, dba: 87.8071559194511
[...]
If there is nothing to read, the read command seems to for something to read.... this seems to be a special behavior of the read command on devices (at least on /dev/dsp1). If there is something to read it will do the calculation as 8000 values were reached (which is 8000 values per second == 8KHz...