perl - File::Basename->fileparse возвращает "File::Basename"
По какой-то причине мой код делает эту странную вещь, где 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 ответ
Решение
fileparse
это не метод; это функция. Эта функция экспортируется по умолчанию, так что вы действительно хотите сделать
use File::Basename;
my $fileName = fileparse($filePath);
Вы использовали это как вызов метода. Вот 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