perl - File :: Basename-> fileparse返回“File :: Basename”

时间:2013-07-24 23:06:27

标签: perl fileparse

出于某种原因,我的代码正在做这个奇怪的事情fileparse只打印(字面意思)File::Basename

 use strict;
 use warnings 'all';
 use File::Basename;

 ...

 my $fileName = File::Basename->fileparse($filePath);
 print("$filePath\n");
 print("$fileName\n");

输出是:

a/b/c/d.bin
File::Basename

我做错了什么?

1 个答案:

答案 0 :(得分:8)

fileparse不是一种方法;这是一个功能。默认情况下会导出此函数,因此您实际上想要

use File::Basename;
my $fileName = fileparse($filePath);

您已使用is作为方法调用。这里File::Basename->fileparse($filePath)相当于

fileparse("File::Basename", $filePath)

因为在方法调用中, invocant (通常是对象;这里是包名称)成为第一个参数。这是错误的,因为它将"File::Basename"视为要解析的路径,将以下参数视为有效后缀列表。

如果要使用fileparse函数而不将其导出到命名空间,可以

use File::Basename (); # note empty parens that supress the import
File::Basename::fileparse(...); # use fully qualified name