2

出于某种原因,我的代码正在做这个奇怪的事情,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

我做错了什么?

4

1 回答 1

8

fileparse不是方法;这是一个功能。这个函数是默认导出的,所以你实际上想做

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

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

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

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

如果您想使用该fileparse功能而不将其导出到您的命名空间,您可以

use File::Basename (); # note empty parens that supress the import
File::Basename::fileparse(...); # use fully qualified name
于 2013-07-24T23:10:31.560 回答