Почему Perl File :: GlobMapper не экспортирует глоб-карту? - PullRequest
1 голос
/ 25 апреля 2010

Следующее довольно хорошо скопировано из документации.

    use File::GlobMapper qw( globmap );

    for my $pair (globmap '<*.tar.gz>' => '<#1.tgz>' )
     {
     }

И это дает

    String found where operator expected at globmapper_test1.pl line 4, near "globmap '<*.tar.gz>'"
            (Do you need to predeclare globmap?)

(Использование ActivePerl 5.10.0 в Windows)

Дополнительные вопросы - если GlobMapper экспортирует только одну функцию, почему она установлена, поэтому вы должны экспортировать ее явно?

Ответы [ 3 ]

3 голосов
/ 25 апреля 2010

Это ошибка в File :: GlobMapper . Он устанавливает переменную @EXPORT_OK, но фактически не использует Exporter .

Но становится хуже. globmap не возвращает список arrayrefs (как заявлено в документации). Это действительно возвращает arrayref из arrayrefs. Так что вам действительно нужно написать:

use File::GlobMapper; 

for my $pair (@{ File::GlobMapper::globmap('<*.tar.gz>' => '<#1.tgz>') }) { 
  my ($from, $to) = @$pair;
} 
1 голос
/ 26 апреля 2010

Ваш дополнительный вопрос: не имеет значения, сколько имен подпрограмм вы хотите экспортировать. Хорошей идеей является неявный импорт, чтобы не топать что-либо, что уже сделал вызывающий файл.

1 голос
/ 25 апреля 2010

Я никогда не использовал File :: GlobMapper , но я только что загрузил его из CPAN, и Я воспроизвел ваше сообщение. Одним из способов решения этой проблемы является использование полного вызова к функции globmap. Попробуйте что-то вроде этого:

use File::GlobMapper; 

for my $pair (File::GlobMapper::globmap('<*.tar.gz>' => '<#1.tgz>')) 
 { 
 } 

Похоже, что POD не показывает правильный способ использования кода. Вы можете отправить отчет об ошибке на CPAN. Было бы лучше, если бы вы включили патч для POD.

Глядя на исходный код GlobMapper.pm, кажется, что он на самом деле не использует модуль Exporter. Это объяснило бы сообщение об ошибке. Я не думаю, что код может экспортировать какие-либо функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...