http://qs321.pair.com?node_id=662807

initself has asked for the wisdom of the Perl Monks concerning the following question:

Venerable Monks,

I am using MP3::Tag for a very simple operation: parsing the id3v2 tag format into a %02d format for use with id3v1, like so:

#!/usr/bin/perl use warnings; use strict; use Data::Dumper; use MP3::Tag; my $filename = $ARGV[0]; die "Usage: $0 filename" unless $filename; my $mp3 = MP3::Tag->new($filename); $mp3->get_tags(); my $id3v1 = $mp3->{ID3v1} if exists $mp3->{ID3v1}; my $id3v2 = $mp3->{ID3v2} if exists $mp3->{ID3v2}; # Convert id3v2 track format to id3v1 my $track = $id3v2->track; $track = sprintf( "%02d", (split(/\//, $track))[0] ); $id3v1->track($track); $id3v1->write_tag();

Dumping $id3v1 right before the write_tag function shows the track field populated with "01". Dumping the tag after the write shows "1". I have torn apart both MP3::Tag and MP3::Tag::ID3v1 and I just cannot find anything that is truncating this data, althought MP3::Tag does refer to it:

2-digit numbers, or I<number1/number2> with number1,2 up to 999 are allowed for the track number (the leading 0 is stripped);

I just can't find where that is actually implemented! Can anyone help me?