http://www.perlmonks.org?node_id=158849

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

I'm having trouble installing extra modules on an active state (windows) perl installation. I download the zip file containing the necessary files and excute the install command in the README file (ppm install xxxx.ppd) and it finishes with no errors. When I try to use the module, however, I get errors. The most recent error was with an MP3 module:
#!/usr/bin/perl -w use strict; use MP3::ID3v1Tag; opendir(DIR, "H:\\test") || die "Unable to open directory: $!"; my @file_names = readdir(DIR); closedir(DIR); my ($title, $artist, $mp3_file); foreach my $file (@file_names) { $mp3_file = new MP3::ID3v1Tag("$file"); $title = $mp3_file->get_title(); $artist = $mp3_file ->get_artist(); print "$title - artist\n"; } and I get this error...... Can't open .: Permission denied at d:/Perl/site/lib/MP3/ID3vTag.pl lin +e 83 Can't call method "get_title" on an undefined value at rename.pl line +57
Any suggestions?

Replies are listed 'Best First'.
Why Johnny can't troubleshoot.
by boo_radley (Parson) on Apr 13, 2002 at 21:02 UTC
    using psi::esp, I bet you're trying to get an id3 tag on a directory, maybe . or ..
    try changing
    my ($title, $artist, $mp3_file); foreach my $file (@file_names) { $mp3_file = new MP3::ID3v1Tag("$file"); $title = $mp3_file->get_title(); $artist = $mp3_file ->get_artist(); print "$title - artist\n"; }
    to
    my ($title, $artist, $mp3_file); foreach my $file (@file_names) { print "now working with file '$file'\n"; # remove mp3_file from the my declaration outside the loop my $mp3_file = new MP3::ID3v1Tag("$file"); die "Can't create id tag : $!" unless $mp3_file; $title = $mp3_file->get_title(); $artist = $mp3_file ->get_artist(); print "$title - artist\n"; }
    to get a more detailed error message. Also use -d to determine if $file is really a directory and take appropriate action.
Re: installing modules
by RMGir (Prior) on Apr 14, 2002 at 01:20 UTC
    Another problem that the others did not mention is that readdir will return file NAMES, not full paths.

    If you do:

    my $dir='h:\test'; opendir(DIR, $dir) || die "Unable to open directory: $!"; my @file_names = grep {-f $_} map "$dir\\$_",readdir(DIR); closedir(DIR);
    you'll wind up with a list in @file_names of the full paths of the files, and ONLY the files, in that directory.

    You could also add a grep on /mp3/i in that list to make sure you only get the mp3 files, since those are what you're looking for...
    --
    Mike

A reply falls below the community's threshold of quality. You may see it by logging in.