Strawberry Perl: забывает о переменных окружения?

Я установил несколько модулей в свой Strawberry Perl, работающий в Windows XP, например:

  • Regexp :: Common
  • URI :: Find :: Schemeless

Эти библиотеки отлично работают в моем коде Perl с первого раза сразу после установки каждого модуля.

Проблема в том, что каждый последующий день, когда я запускаю свои скрипты, они не работают с ошибкой:

Не удается найти Regexp / Common.pm в @INC (@INC содержит: C: / клубничный / perl / lib C: / клубничный / perl / site / lib C: \ клубничный \ perl \ vendor \ lib.)

Я поместил все соответствующие пути в переменные среды в Windows: PERL5LIB и другие, такие как lib, которые были предложены в различных других ответах на stackoverflow и других сайтах, связанных с установками модулей. Сценарии продолжают отказывать, если я не использую следующий обходной путь, который я выяснил:

  1. Откройте окно «редактировать переменные среды» в Windows. («Мой компьютер» -> «Свойства» -> вкладка «Дополнительно» -> «Переменные среды»)
  2. Ничего не добавляя и не меняя, нажмите ОК.
  3. Повторно откройте все консоли Perl, которые уже были открыты, или откройте новое окно Perl.
  4. Теперь библиотеки все находят без проблем.

Кто-нибудь знает, почему это может происходить? Я подозреваю, что это может быть что-то конкретное, связанное с Windows / cmd или даже с настройкой среды Windows моей компании?

Мы будем благодарны за любые предложения, потому что это очень неприятная проблема!


person Mandy    schedule 20.11.2013    source источник
comment
Если это корпоративный компьютер, я не удивлюсь, если узнаю, что существует сценарий службы управления системой, который запускается ежедневно для отмены определенных изменений среды. В этом случае вам может потребоваться обернуть ваши сценарии Perl в пакетный файл, который явно устанавливает эти переменные перед вызовом сценария perl с set PERL5LIB=whatever и т. Д.   -  person Joe Z    schedule 20.11.2013
comment
Что echo %PERL5LIB% печатает при запуске в консоли Perl?   -  person cjm    schedule 20.11.2013
comment
@cjm - там написано c: \ клубника \ lib; c: \ клубника \ c \ lib; c: \ клубника \ perl \ lib; c: \ клубника \ perl \ site \ lib; c: \ клубника \ perl \ vendor \ lib, в котором находятся библиотеки. Он говорит это после того, как я сделаю небольшое обходное решение. Это действительно странно!   -  person Mandy    schedule 21.11.2013
comment
Какую версию Windows вы используете? Я нашел сообщения об этом, по крайней мере, в Vista (pcreview.co.uk/forums/), так что это не совсем уникальная проблема, но я не нашел решения. В любом случае, это не проблема программирования, так что это не относится к SO.   -  person Mark Reed    schedule 21.11.2013


Ответы (1)


По умолчанию Windows не очищает переменные среды ежедневно, поэтому, вероятно, что-то в ваших корпоративных настройках сбрасывает переменные среды.

В этом случае у вас есть несколько вариантов:

  1. Попросите сетевых администраторов изменить сценарий, чтобы он не сбрасывал их (или не включал PERL5LIB каталоги, которые вы хотите указать).
  2. Напишите еще одну ежедневную задачу, выполняемую после их ежедневной задачи, которая повторно добавляет переменные на ваш локальный компьютер.
  3. Оберните свои сценарии Perl пакетным файлом Windows или запустите их с perl -I, чтобы указать библиотеку во время выполнения.
  4. Запустите свои сценарии Perl из Cygwin bash или mingw bash, которые не будут использовать глобальные переменные среды вашего компьютера.
person Glitch Desire    schedule 20.11.2013