Я понял это. Проблема вызвана взаимодействием нескольких вещей:
- У меня есть * .pl файлы, связанные с perl.exe (для последней установленной версии Perl - 5.12.1).
- В моей переменной окружения PATHEXT есть «.PL», чтобы я мог запускать сценарии Perl без ввода расширения. например
C:\>foo
вместо C:\>foo.pl
- У моей установки утилиты
pp
нет оболочки для пакетного файла, созданной с помощью pl2bat
. (Я не уверен почему.)
Конечным результатом является то, что когда я запустил pp @myconfig
, он фактически сделал это:
C:\Perl\5.12.1\bin\perl.exe C:\Perl\5.10.1\site\bin\pp.pl @myconfig
т.е. он запустил версию pp.pl по моему пути, используя версию perl, связанную с файлами * .pl, not версию perl в моем PATH. Таким образом, смесь библиотек в @INC
между тем, что получено из исполняемого файла (C: \ Perl \ 5.12.1 \ lib), и тем, что получено из переменной среды PERL5LIB (C: \ Perl \ 5.10.1 \ site \ lib).
Решение состоит в том, чтобы либо запустить pp
как perl pp.pl
, либо (лучше, потому что вам не нужно ничего запоминать), чтобы создать пакетную оболочку. Предполагая, что .BAT находится в PATHEXT до .PL, когда вы наберете pp
, Windows будет запускать pp.bat
вместо pp.pl
, а pp.bat
вызывает perl
(используя версию в вашем пути).
вздыхает