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