为什么Perl不能找到File :: BaseName-> fileparse?

mac*_*rth 4 macos perl

在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'\.[^\.]*');
Run Code Online (Sandbox Code Playgroud)

我收到错误消息的任何想法:

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

就此而言,我为什么要放File::BaseName?如果我不这样做,它说

Undefined subroutine &main::fileparse
Run Code Online (Sandbox Code Playgroud)

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,这工作正常(但我必须把整行).

Ale*_*rov 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'\.[^\.]*'); # !!!
Run Code Online (Sandbox Code Playgroud)

  • 他也没有使用正确的限定名称语法.它是`::`,而不是` - >`. (3认同)