The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

my $filename = shift;
die "usage: extractID3v2 filename" unless defined $filename;
  
open FH, "<$filename" or die "Can't open $filename: $!\n";

seek(FH, 0,0);
read(FH, $header, 10);

if ($tagsize = read_header($header)) {
  read(FH, $tagdata, $tagsize);
  print $header, $tagdata;
} else {
  print "$filename: ID3v2 Tag not found\n";
}
sub read_header {
  my ($header) = @_;
  my %params;

  if (substr ($header,0,3) eq "ID3") {
    # get the tag size
    my $size=0;
    foreach (unpack("x6C4", $header)) {
      $size = ($size << 7) + $_;
    }
    return $size;
  }
  return 0; # ID3v2-Tag found
}