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 回答