#!/usr/bin/perl use strict; use warnings; use MP3::Tag; my $mp3 = MP3::Tag->new( 'test.mp3' ); $mp3->get_tags; my $id3v2 = exists $mp3->{'ID3v2'} ? $mp3->{'ID3v2'} : $mp3->new_tag('ID3v2'); { open( my $in, '<', 'test.jpg' ) or die "Cannot open file 'test.jpg': $!"; binmode( $in ); my $data = do{ local $/=undef; <$in> }; unless ( $id3v2->get_frame('APIC') ) { $id3v2->add_frame( 'APIC', 'image/jpg', 3, 'Cover Image', $data ); } # unless else { $id3v2->change_frame( 'APIC', 'image/jpg', 3, 'Cover Image', $data ); } # else $id3v2->write_tag; }