in reply to Re: Extracting Image/File Metadata
in thread Extracting Image/File Metadata

I think sysread will work for me, except for one thing: I need to be able to pull out and retain some data in binary format. I know that pack adn unpack is used for that, as you stated, but I can't seem to get it to work. Is there any special trick to using sysread with pack and unpack? Thanks for your time and your reply.

Replies are listed 'Best First'.
Re: Re: Re: Extracting Image/File Metadata
by pfaut (Priest) on Feb 06, 2003 at 04:34 UTC

    I use the code below to get some informatiion out of WAV files. Maybe it will help you read your files.

    #!/usr/bin/perl -w use strict; use Fcntl; my $fnm = shift; sysopen WAV,$fnm,O_RDONLY; my $riff; sysread WAV,$riff,12; my $fmt; sysread WAV,$fmt,24; my $data; sysread WAV,$data,8; close WAV; # RIFF header: 'RIFF', long length, type='WAVE' my ($r1,$r2,$r3) = unpack "A4VA4", $riff; # WAV header, 'fmt ', long length, short unused, short channels, # long samples/second, long bytes per second, short bytes per sample, # short bits per sample my ($f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8) = unpack "A4VvvVVvv",$fmt; # DATA header, 'DATA', long length my ($d1,$d2) = unpack "A4V", $data; print << "EOF"; RIFF header: $r1, length $r2, type $r3 Format: $f1, length $f2, always $f3, channels $f4, sample rate $f5, bytes per second $f6, bytes per sample $f7, bits per sample $f8 Data: $d1, length $d2 EOF
    --- print map { my ($m)=1<<hex($_)&11?' ':''; $m.=substr('AHJPacehklnorstu',hex($_),1) } split //,'2fde0abe76c36c914586c';