>>The use utf8 pragma tells the Perl parser to allow UTF-8 in the program text in the current lexical scope (allow UTF-EBCDIC on EBCDIC based platforms). The no utf8 pragma tells Perl to switch back to treating the source text as literal bytes in the current lexical scope.
Source:
http://perldoc.perl.org/utf8.html
This essentially means that you can have actual UTF-8 characters in your source code without having to worry about typing stuff like \x{30B8}\{30A7}
Internally, perl treats all data as utf-8, however there's like a ton of unicode formats. Once you've found out your input file's unicode encoding, you can then use the Encode module to decode the unicode input into perl's internal representation, and then encode it back to the file's unicode format for writing back into the file.
As for regexp, perl's regexp engine supports what it calls polymorphic regexp. When matching against unicode data, regexp operators have character semantics, and when matching against non-unicode data, the same regexp operators have byte semantics. No change to your code is needed to make regexp do the right thing in each context.
What this means is that operators such as . do not just match a single byte, but an entire unicode character. For example, instead of matching \ in \x{E7}, it'll match the entire \x{E7} instead, for the character ç.
This is as much as what I can recall off hand. Some parts might not be totally accurate, as I hardly work with unicode files these days.
As for MP3 and ID3 tags modules, a quick search on search.cpan.org for MP3 and ID3 should point you in the right direction.