in reply to Reading WAV files

The part that theorbtwo left out of his reply was the matter of reading binary data into a scalar variable (though maybe you've handled this already, since you say you solved getting past the header).

You can read a fixed number of bytes at a time by setting $/ to a numeric value, like this:

$/ = \8; # read 8 bytes at a time; binmode INPUTFH; # don't forget this on MS-Windows! # (you can use binmode on STDIN, as well, if needed) while (<INPUTFH>) { # $_ now holds 8 bytes of data ... }
Of course, you can use a larger or smaller number of bytes per read, depending on what you want to do. You could also use the "read" or "sysread" functions, where one of the args given to the function is the number of bytes to read. Or if your wav files aren't that big, just seek past the header and slurp the rest all at once into a scalar by setting $/ to undef.