Разве List :: Util не является частью стандартного распространения Perl? - PullRequest
4 голосов
/ 01 января 2012

В определенной системе я запускаю Perl-скрипт, и он терпит неудачу, говоря:

Can't locate List/Util.pm in @INC (@INC contains: <Some-Path>/ActiveState/perl/lib <Some-Path>/ActiveState/perl/site/lib .) at <Some-Other-Path>\searchCobolPgms.ps line 7.

Теперь странная часть заключается в том, что перед развертыванием кода в сбойной системе язапустил его на моем ноутбуке, и он просто работал нормально.Разница в обеих системах заключается в том, что в моем ноутбуке я использую Cygwin, и Perl в комплекте с ним, а указанная неисправная система имеет ActiveState perl .

<Some-Path>perl -v

This is perl, v5.6.1 built for MSWin32-x86-multi-thread
(with 1 registered patch, see perl -V for more detail)

Copyright 1987-2001, Larry Wall

Binary build 635 provided by ActiveState Corp. http://www.ActiveState.com
Built 15:34:21 Feb  4 2003


Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'.  If you have access to the
Internet, point your browser at http://www.perl.com/, the Perl Home Page.

Затем я искал Utilпод lib Cygwin и он присутствовал под i686-cygwin

c:\cygwin\lib\perl5\5.10>find . -name Util.pm
./CGI/Util.pm
./i686-cygwin/Hash/Util.pm
./i686-cygwin/List/Util.pm
./i686-cygwin/Scalar/Util.pm

Так что теперь я в замешательстве.Isn; t List :: Util часть стандартного дистрибутива perl?Причина моей путаницы

  1. List / Util.pm присутствует в i686-cygwin
  2. При установке ActiveSync не было List / Util.pm

Ответы [ 2 ]

12 голосов
/ 01 января 2012

List :: Util был добавлен в ядро ​​только в 5.7 (версия для разработки), и первый стабильный выпуск perl, содержащий List :: Util, был 5.8.0.Таким образом, хотя он находится в дистрибутиве Perl 5.10, который вы установили в Cygwin, исполняемый файл Perl 5.6.1 ActiveState, который вы вызывали, не имеет его.Вы должны обновить Perl ActiveState как минимум до 5.8.0, и тогда он будет иметь нужный вам модуль.

Вот ссылка, чтобы найти все версии perl, которые содержат основной модуль: http://perlpunks.de/corelist/version?module=List%3A%3AUtil

10 голосов
/ 01 января 2012

Когда я проверяю corelist, я получаю:

corelist List::Util
List::Util was first released with perl v5.7.3

Ваша версия perl, кажется, 5.6.1, в этом случае List::Util не будет частью основной установки.

Судя по пути c:\cygwin\lib\perl5\5.10, похоже, что ваша версия cygwin по крайней мере 5.10, но, как вы заметите, путь cygwin не входит в @INC вашей другой версии perl. Скорее всего, это отдельные установки, и поэтому они не используют библиотеки совместно.

Обновите свой Perl ActiveState, и все должно быть хорошо.

...