4

OS X 10.8.4 のテスト perl プログラムで:

#!/usr/bin/perl

use warnings;
use strict;
use File::BaseName;

my $fname = "/usr/local/junk.txt";
my ($name, $path, $suffix1) = File::BaseName->fileparse($fname, qr'\.[^\.]*');

エラーメッセージが表示される理由:

Can't locate object method "fileparse" via package "File::BaseName"
(perhaps you forgot to load "File::BaseName"?)

さらに言えば、なぜ私は置く必要があるのFile::BaseNameですか?私がそうしないなら、それは言う

Undefined subroutine &main::fileparse

perl -v は以下を与えます:

これは、darwin-thread-multi-2level 用にビルドされた perl 5、バージョン 12、subversion 4 (v5.12.4) です。

@INC には /System/Library/Perl/5.12/ が含まれており、 /System/Library/Perl/5.12/File/BaseName.pm が存在し、その中に fileparse があります。

それが役立つ場合、私が使用File::Specして参照するとFile::Spec->splitpath、それは正常に機能します(ただし、完全な行を入力する必要があります)。

4

1 に答える 1

8

大文字と小文字の区別: Basename小文字の "N" で書かれています。Acme::require::caseはその問題を防ぎます。

さらに、モジュールfileparseをインポートした後は、修飾名を使用する必要はありません。File::Basename

#!/usr/bin/perl

use warnings;
use strict;
use File::Basename; # !!!

my $fname = "/usr/local/junk.txt";
my ($name, $path, $suffix1) = fileparse($fname, qr'\.[^\.]*'); # !!!
于 2013-07-21T08:42:21.570 に答える