1

ファイル名に基づいてMP3コレクションにタグを付け直す小さなperlスクリプトを書いています。

#!/usr/bin/perl

use strict;
use warnings;
use MP3::Tag;
use File::Find;

MP3::Tag->config(write_v24 => 1);
my $dirpath = "../MP3s/";
finddepth(\&wanted, $dirpath);
sub wanted {
    unless (-d $_) {
        my ($track,$artist,$title);
        if(($track,$artist,$title) = ($_ =~ m/(\d+) - (.+?) - (.+)\.mp3$/g)){
            #handle songs with a track number
            my $mp3 = MP3::Tag->new($_) or die $!;

            $mp3->track_set($track);
            $mp3->artist_set($artist);
            $mp3->title_set($title);
            $File::Find::dir =~ m/.*\/(.*)/;
            $mp3->album_set($1);
            $mp3->update_tags();
            $mp3->close();
            print "$track - $artist - $title\n";
        } elsif(($artist,$title) = ($_ =~ m/(.+?) - (.+)\.mp3$/g)){
            #handle songs without a track number
            my $mp3 = MP3::Tag->new($_) or die $!;

            $mp3->track_set("");
            $mp3->artist_set($artist);
            $mp3->title_set($title);
            $mp3->update_tags();
            $mp3->close();
            print "$artist - $title\n";
        }
    }   
}

これは正常に機能しますが、このエラーでスクリプトがクラッシュするファイルがいくつかあります。 UTF-16:Unrecognised BOM 3100 at C:/strawberry/perl/lib/Encode.pm line 175.

このエラーの原因は何ですか?ファイル名には、ドイツ語のウムラウト(ä、ö、ü)のような特殊文字は含まれていません。

この問題を解決したり、そのようなファイルをスキップしたりするにはどうすればよいですか?

4

1 に答える 1

3

それを追加することから始めてuse Carp::Always、自分のプログラムのどのステートメントが致命的であったかを示すスタック トレースを取得する必要があります。

于 2012-12-16T21:24:37.730 に答える