Spec-Zone.ru › Perl 5.32

perlwin32

СОДЕРЖАНИЕ

  • НАЗВАНИЕ
  • СИНОПСИС
  • ОПИСАНИЕ
    • Настройка Perl на Windows
    • Компиляция
    • Тестирование Perl на Windows
    • Установка Perl на Windows
    • Рекомендации по использованию Perl на Windows
    • Запуск скриптов Perl
    • Разное
  • ОШИБКИ И ОСОБЕННОСТИ
  • БЛАГОДАРНОСТИ
  • АВТОРЫ
  • СМОТРИТЕ ТАКЖЕ
  • ИСТОРИЯ

НАЗВАНИЕ

perlwin32 - Perl под Windows

СИНОПСИС

Эти инструкции предназначены для компиляции Perl под Windows 2000 и более поздними версиями.

ОПИСАНИЕ

Прежде чем начать, ознакомьтесь с файлом README, расположенным в корневом каталоге, куда была распакована дистрибуция Perl. Убедитесь, что вы ознакомились и поняли условия распространения данного программного обеспечения.

Также убедитесь, что вы прочитали раздел "ОШИБКИ И ОСОБЕННОСТИ" ниже, чтобы ознакомиться с известными ограничениями данного порта.

Файл INSTALL в корневом каталоге perl содержит много информации, которая актуальна только для людей, компилирующих Perl на системах Unix. В частности, вы можете безопасно пропустить любую информацию, в которой упоминается "Configure".

Вы также можете рассмотреть другой вариант построения perl, работающего под Windows: файл README.cygwin, который предоставляет другой набор правил для создания perl для Windows. Этот метод, вероятно, позволит вам создать более совместимый с Unix perl, но вам также потребуется загрузить и использовать различные другие программные средства поддержки во время компиляции и выполнения, описанные в этом файле.

Этот набор инструкций предназначен для описания так называемого "родного" порта Perl для платформы Windows. Это включает как 32-битные, так и 64-битные операционные системы Windows. Результирующий Perl не требует дополнительного программного обеспечения для работы (кроме того, что поставляется с вашей операционной системой). В настоящее время этот порт поддерживает использование одного из следующих компиляторов на архитектуре Intel x86:

Microsoft Visual C++    version 6.0 or later
Intel C++ Compiler      (experimental)
Gcc by mingw.org        gcc version 3.4.5 or later
                        with runtime < 3.21
Gcc by mingw-w64.org    gcc version 4.4.3 or later

Обратите внимание, что две последние из них фактически являются конкурирующими проектами, оба предоставляющими полную среду разработки gcc для MS Windows:

http://mingw.org

Предоставляет среду разработки gcc, нацеленную на 32-битную платформу Windows.

http://mingw-w64.org

Предоставляет среду разработки gcc, нацеленную как на 64-битную, так и на 32-битную платформы Windows (несмотря на название проекта "mingw-w64", они не ориентированы только на 64-битные). Они предоставляют родные компиляторы gcc и кросс-компиляторы, которые также поддерживаются makefile perl.

Компиляторы Microsoft Visual C++ также теперь предоставляются бесплатно. Они доступны как "Visual C++ Toolkit 2003" или "Visual C++ 2005-2019 Express [или Community, начиная с 2017 года] Edition" (и также как часть ".NET Framework SDK") и являются теми же компиляторами, которые поставляются с "Visual C++ .NET 2003 Professional" или "Visual C++ 2005-2019 Professional" соответственно.

Этот порт также может быть скомпилирован на IA64/AMD64 с помощью:

Microsoft Platform SDK    Nov 2001 (64-bit compiler and tools)
MinGW64 compiler (gcc version 4.4.3 or later)

Windows SDK можно загрузить с https://developer.microsoft.com/windows/downloads/sdk-archive. Компилятор MinGW64 доступен по адресу http://mingw-w64.org. Последний фактически является кросс-компилятором, ориентированным на Win64. Также доступен усеченный компилятор (без java или gfortran), подходящий для компиляции perl: http://strawberryperl.com/package/kmx/64_gcctoolchain/

ПРИМЕЧАНИЕ: Если вы используете 32-битный компилятор для компиляции perl на 64-битной операционной системе Windows, установите переменную среды WIN64 в значение "undef". Кроме того, усеченный компилятор проходит тесты только при USE_ITHREADS *= define (в отличие от undef) и при том, что строка CFG *= Debug закомментирована.

Этот порт полностью поддерживает MakeMaker (набор модулей, используемых для компиляции расширений для perl). Поэтому вы должны иметь возможность компилировать и устанавливать большинство расширений, найденных на сайтах CPAN. См. "Рекомендации по использованию Perl на Windows" ниже для общих советов по этому.

Настройка Perl на Windows

Make

Для сборки исходных кодов вам необходима программа «make». Если вы используете Visual C++ или инструменты Windows SDK, вы можете использовать nmake, поставляемый с Visual C++ или Windows SDK. Также для Visual C++ или Windows SDK вы можете использовать dmake или gmake вместо nmake. dmake — это программное обеспечение с открытым исходным кодом, но оно не входит в состав Visual C++ или Windows SDK. Для сборок с использованием gcc необходимы dmake или gmake. nmake не поддерживается для сборок с gcc. Параллельная сборка поддерживается только с dmake и gmake, а не с nmake. При использовании dmake рекомендуется использовать dmake версии 4.13 или новее для параллельной сборки. Более старые версии dmake в режиме параллельной сборки имеют очень высокую загрузку ЦП и сильно перегружают диск/файловую систему с помощью дублирующих вызовов ввода-вывода в агрессивном цикле опроса.

Портированная версия dmake для Windows доступна по адресу:

https://metacpan.org/release/dmake

Скачайте и установите dmake в какой-либо каталог на вашем пути.

Командная оболочка

Используйте стандартную командную оболочку «cmd», которая поставляется с Windows. Некоторые версии популярной оболочки 4DOS/NT имеют несовместимости, которые могут вызвать проблемы. Если сборка завершается неудачно в этой оболочке, попробуйте выполнить сборку снова с использованием оболочки cmd.

Убедитесь, что путь к каталогу сборки не содержит пробелов. В таких случаях сборка обычно выполняется, но некоторые тесты могут завершиться неудачно.

Microsoft Visual C++

Для сборки достаточно nmake, поставляемого с Visual C++. Visual C++ требует выполнения определенных действий в консоли перед успешным запуском. Для того, чтобы консольная оболочка смогла запустить компилятор C, необходимо предварительно выполнить vcvarsall.bat x86 для компиляции под x86-32 и vcvarsall.bat amd64 для x86-64.

В типичной установке продукта Microsoft C++ компилятора эти пакетные файлы уже будут находиться в переменной окружения PATH, поэтому вы можете ввести их в консоли без абсолютного пути. Если вам нужно найти абсолютный путь к пакетному файлу, он обычно находится где-то в пути C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC. В некоторых более новых продуктах Micrsoft C (выпущенных после ~2004 года), установщик добавит ярлык в меню Пуск для запуска нового окна консоли, где консоль уже настроена для вашей целевой архитектуры (x86-32, x86-64 или IA64). С новыми компиляторами вы также можете использовать старые пакетные файлы, если захотите.

Microsoft Visual C++ 2008-2019 Express/Community Edition

Эти бесплатные версии Visual C++ 2008-2019 Professional содержат те же компиляторы и компоновщики, что и полные версии, а также всё необходимое для сборки Perl, без необходимости отдельного скачивания Windows SDK, как это было в предыдущих версиях.

Эти пакеты можно скачать, выполнив поиск в Центре загрузок по адресу https://www.microsoft.com/downloads/search.aspx?displaylang=en. (Предоставление точных ссылок на эти пакеты оказалось бесполезным, так как ссылки постоянно меняются.)

Установите Visual C++ 2008-2019 Express/Community, затем настройте свою среду, например:

C:\Program Files\Microsoft Visual Studio 12.0\Common7\Tools\vsvars32.bat

(предполагается, что был выбран стандартный путь установки).

Теперь Perl должен собираться с помощью win32/Makefile. Сначала вам необходимо отредактировать этот файл, чтобы установить CCTYPE на одно из значений MSVC90-MSVC142.

Microsoft Visual C++ 2005 Express Edition

Эта бесплатная версия Visual C++ 2005 Professional содержит тот же компилятор и компоновщик, что и полная версия, но не содержит всего необходимого для сборки Perl.

Вам также необходимо загрузить «Windows SDK» (требуются компоненты «Core SDK» и «MDAC SDK») для дополнительных заголовочных файлов и библиотек.

Эти пакеты можно скачать, выполнив поиск в Центре загрузок по адресу http://www.microsoft.com/downloads/search.aspx?displaylang=en. (Предоставление точных ссылок на эти пакеты оказалось бесполезным, так как ссылки постоянно меняются.)

Постарайтесь получить последнюю версию Windows SDK. Иногда эти пакеты содержат название конкретной версии Windows в своём имени, но на самом деле работают и с другими версиями ОС. Например, «Windows Server 2003 R2 Platform SDK» также работает на Windows XP SP2 и Windows 2000.

Сначала установите Visual C++ 2005, а затем Platform SDK. Настройте свою среду следующим образом (предполагается, что были выбраны стандартные пути установки):

SET PlatformSDKDir=C:\Program Files\Microsoft Platform SDK

SET PATH=%SystemRoot%\system32;%SystemRoot%;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;%PlatformSDKDir%\Bin

SET INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;%PlatformSDKDir%\include

SET LIB=C:\Program Files\Microsoft Visual Studio 8\VC\LIB;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;%PlatformSDKDir%\lib

SET LIBPATH=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

(PlatformSDKDir может потребоваться настроить по-другому в зависимости от используемой версии. Более ранние версии устанавливались в «C:\Program Files\Microsoft SDK», в то время как последние версии устанавливаются в специфичные для версии расположения, такие как «C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2».)

Perl должен теперь собираться с помощью win32/Makefile. Вам нужно будет отредактировать этот файл, чтобы установить

CCTYPE = MSVC80

и установить CCHOME, CCINCDIR и CCLIBDIR, как указано в настройках среды выше.

Microsoft Visual C++ Toolkit 2003

Этот бесплатный набор инструментов содержит тот же компилятор и компоновщик, что и в Visual C++ .NET 2003 Professional, но не содержит всего необходимого для сборки Perl.

Вам также необходимо загрузить «Platform SDK» (требуются компоненты «Core SDK» и «MDAC SDK») для заголовочных файлов, библиотек и rc.exe, а также «.NET Framework SDK» для дополнительных библиотек и nmake.exe. Обратите внимание, что последний (который также включает бесплатный компилятор и компоновщик) требует предварительной установки «.NET Framework Redistributable». Его можно загрузить и установить отдельно, но он входит в состав «Visual C++ Toolkit 2003».

Эти пакеты можно загрузить, выполнив поиск в Центре загрузок по адресу https://www.microsoft.com/downloads/search.aspx?displaylang=en. (Предоставление точных ссылок на эти пакеты оказалось бесполезным, так как ссылки постоянно меняются.)

Постарайтесь получить последнюю версию Windows SDK. Иногда эти пакеты содержат название конкретной версии Windows в своём имени, но на самом деле работают и с другими версиями ОС. Например, «Windows Server 2003 R2 Platform SDK» также работает на Windows XP SP2 и Windows 2000.

Сначала установите Toolkit, затем Platform SDK, а затем .NET Framework SDK. Настройте свою среду следующим образом (предполагается, что были выбраны стандартные пути установки):

SET PlatformSDKDir=C:\Program Files\Microsoft Platform SDK

SET PATH=%SystemRoot%\system32;%SystemRoot%;C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin;%PlatformSDKDir%\Bin;C:\Program Files\Microsoft.NET\SDK\v1.1\Bin

SET INCLUDE=C:\Program Files\Microsoft Visual C++ Toolkit 2003\include;%PlatformSDKDir%\include;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include

SET LIB=C:\Program Files\Microsoft Visual C++ Toolkit 2003\lib;%PlatformSDKDir%\lib;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib

(PlatformSDKDir может потребоваться настроить по-другому в зависимости от используемой версии. Более ранние версии устанавливались в «C:\Program Files\Microsoft SDK», в то время как последние версии устанавливаются в специфичные для версии расположения, такие как «C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2».)

Несколько необходимых файлов всё ещё отсутствуют:

  • cvtres.exe требуется link.exe при использовании файла .res. Он фактически установлен .NET Framework SDK, но по адресу:

    C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322

    Скопируйте его оттуда в %PlatformSDKDir%\Bin

  • lib.exe обычно используется для создания библиотек, но link.exe с параметром /lib также работает, поэтому измените win32/config.vc, чтобы использовать его вместо этого:

    Измените строку, которая выглядит как:

    ar='lib'

    на:

    ar='link /lib'

    Также может быть полезно создать пакетный файл с именем lib.bat в C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin содержащий:

    @echo off
    link /lib %*

    для пользы любых нерадивых модулей расширения C, которые вы, возможно, захотите создать позже, которые явно ссылаются на «lib», а не берут своё значение из $Config{ar}.

  • setargv.obj необходим для сборки perlglob.exe (и perl.exe, если включён параметр USE_SETARGV). Platform SDK предоставляет этот объектный файл в исходной форме в %PlatformSDKDir%\src\crt. Скопируйте setargv.c, cruntime.h и internal.h оттуда в какое-нибудь временное место и скомпилируйте setargv.obj с помощью

    cl.exe /c /I. /D_CRTBLD setargv.c

    Затем скопируйте setargv.obj в %PlatformSDKDir%\lib

    В качестве альтернативы, если вам не нужен perlglob.exe и вам не нужно включать параметр USE_SETARGV, то вы можете безопасно просто удалить все упоминания $(GLOBEXE) из win32/Makefile, и setargv.obj не потребуется.

Perl должен теперь собираться с помощью win32/Makefile. Вам нужно будет отредактировать этот файл, чтобы установить

CCTYPE = MSVC70FREE

и установить CCHOME, CCINCDIR и CCLIBDIR, как указано в настройках среды выше.

Компилятор Microsoft Platform SDK 64-битный

Для сборки Perl достаточно nmake, поставляемого с Platform SDK. Убедитесь, что вы выполняете сборку в одной из доступных «Сред средах сборки» после установки Platform SDK из меню «Пуск».

GCC

Perl можно скомпилировать с помощью gcc из MinGW (версия 3.4.5 или новее) или MinGW64 (версия 4.4.3 или новее). Его можно скачать здесь:

http://www.mingw.org/ http://www.mingw-w64.org/

Вам также необходимы dmake или gmake. См. "Make" выше, чтобы узнать, как их получить.

Обратите внимание, что сборка MinGW в настоящее время требует версию MinGW runtime, более раннюю, чем 3.21 (проверьте __MINGW32_MAJOR_VERSION и __MINGW32_MINOR_VERSION).

Также обратите внимание, что сборка в режиме C++ в настоящее время завершается неудачно с MinGW 3.4.5 и 4.7.2 или более поздними версиями, а также с MinGW64 64-битным 6.3.0 или более поздними версиями.

Компилятор Intel C++

Добавлена экспериментальная поддержка использования компилятора Intel C++. Отредактируйте win32/Makefile и выберите правильный CCTYPE для Visual C, в который был установлен Intel C. Также разкомментируйте __ICC, чтобы включить поддержку Intel C в Visual C. Чтобы настроить среду сборки, из меню «Пуск» запустите режим IA-32 Visual Studio 20__ или Intel 64 Visual Studio 20__ в зависимости от ситуации. Затем запустите nmake, как обычно, в этом окне командной строки.

Только компилятор Intel C++ v12.1 был протестирован. Скорее всего, другие версии также будут работать. Использование компилятора Intel C++ вместо Visual C имеет преимущество совместимости с C99, которая необходима некоторым модулям CPAN XS, при одновременном сохранении совместимости с объектным кодом Visual C и инфраструктурой отладки Visual C в отличие от GCC.

Сборка

  • Убедитесь, что вы находитесь в подкаталоге "win32" в корневом каталоге Perl. В этом каталоге находится "Makefile", который будет работать с версиями nmake, поставляемыми с Visual C++, или Windows SDK, и GNU make "GNUmakefile" или dmake "makefile.mk", которые будут работать со всеми поддерживаемыми компиляторами. По умолчанию в файлах make gmake и dmake настройка выполняется для сборки с использованием MinGW/gcc.

  • Отредактируйте GNUmakefile, makefile.mk (или Makefile, если вы используете nmake) и измените значения INST_DRV и INST_TOP. Вы также можете включить различные флаги сборки. Они объяснены в файлах make.

    Обратите внимание, что обычно не рекомендуется пытаться собрать Perl с INST_DRV и INST_TOP, установленными в путь, который уже существует из предыдущей сборки. В частности, это может вызвать проблемы с тестом lib/ExtUtils/t/Embed.t, который пытается собрать тестовую программу и может закончить сборку по отношению к каталогу lib/CORE установленного Perl, а не к тому, который тестируется.

    Вы должны убедиться, что CCTYPE установлен правильно, а CCHOME указывает на место, где вы установили свой компилятор. Для GCC это должен быть каталог, содержащий каталоги bin, include и lib.

    Если вы собираете с кросс-компилятором, предоставленным mingw-w64.org, вам нужно будет раскомментировать строку, устанавливающую GCCCROSS в makefile.mk. Делайте это только если это кросс-компилятор — то есть только если папка bin не содержит gcc.exe. (Кросс-компилятор не предоставляет gcc.exe, g++.exe, ar.exe и т. д. Вместо этого все эти исполняемые файлы имеют префикс 'x86_64-w64-mingw32-'.

    Значение по умолчанию для CCHOME в файлах make для Visual C++ может быть неверным для некоторых версий. Убедитесь, что значение по умолчанию существует и является корректным.

    Если вы хотите статически скомпилировать некоторые расширения ядра в dll Perl, укажите их в макросе STATIC_EXT.

    Внимательно прочтите инструкции в начале файлов make.

  • Введите "dmake" ("gmake" для GNU make или "nmake", если вы используете его).

    Это должно собрать всё. В частности, он создаст perl.exe, perl532.dll в корневом каталоге Perl и различные другие расширения dll в каталоге lib\auto. Если сборка завершится неудачно по какой-либо причине, убедитесь, что вы выполнили предыдущие шаги правильно.

    Чтобы попробовать параллельный режим dmake, введите "dmake -P2", где 2 — максимальное количество параллельных задач, которые вы хотите запустить. Ряд задач в процессе сборки будут выполняться параллельно, но есть точки сериализации, где вы увидите, что только 1 процессор работает на пределе. Это нормально.

    Аналогичным образом, вы можете выполнить сборку параллельно с помощью GNU make, введите "gmake -j2", чтобы выполнить сборку с двумя параллельными задачами, или с большим числом для большего количества.

    Если вы достаточно продвинуты в компиляции кода C, вот предложение по ускорению сборки Perl, и последующей make test. Постарайтесь сохранить переменную среды PATH с наименьшим количеством папок (помните, чтобы сохранить папки вашего компилятора C там). C:\WINDOWS\system32 или C:\WINNT\system32 в зависимости от версии вашей ОС должна быть первой папкой в PATH, так как "cmd.exe" — наиболее часто запускаемая программа во время сборки и последующего тестирования.

Тестирование Perl в Windows

Введите "dmake test" (или "gmake test", "nmake test"). Это запустит большинство тестов из набора тестов (многие тесты будут пропущены).

Не должно быть сбоев тестов.

Если вы собираете с Visual C++ 2013, то три теста могут в настоящее время завершиться ошибкой из-за проблем, связанных с летним временем: t/io/fs.t, cpan/HTTP-Tiny/t/110_mirror.t и lib/File/Copy.t. Ошибки вызваны ошибками в CRT в VC++ 2013, которые исправлены в VC++2015 и более поздних версиях, как объяснено Майкрософт здесь: https://connect.microsoft.com/VisualStudio/feedback/details/811534/utime-sometimes-fails-to-set-the-correct-file-times-in-visual-c-2013. Тем временем, если вам нужны исправленные stat и utime функции, то взгляните на распределение CPAN Win32::UTCFileTime.

Если вы собираете с Visual C++ 2015 или более поздней версии, ext/XS-APItest/t/locale.t может аварийно завершить работу (после того, как все его тесты пройдут). Это связано с регрессией в универсальной CRT, введенной в обновлении Windows 10 от апреля 2018 года, и будет исправлена в обновлении от мая 2019 года, как объяснено здесь: https://developercommunity.visualstudio.com/content/problem/519486/setlocalelc-numeric-iso-latin-16-fails-then-succee.html.

Если вы собираете с определенными версиями (например, 4.8.1) gcc из www.mingw.org, то ext/POSIX/t/time.t может завершить тест 17 с ошибкой из-за известной ошибки в этих сборках gcc: см. https://sourceforge.net/p/mingw/bugs/2152/.

Могут произойти некоторые сбои тестов, если вы используете оболочку командной строки, отличную от родного "cmd.exe", или если вы собираете из пути, содержащего пробелы. Поэтому не делайте этого.

Если вы запускаете тесты из окна оболочки emacs, вы можете увидеть ошибки в op/stat.t. В этом случае запустите "dmake test-notty".

Кроме того, вы должны убедиться, что во время make test у вас нет никаких пакетов GNU-инструментов в вашем пути: некоторые наборы инструментов, такие как Unixutils, включают некоторые инструменты (type например), которые переопределяют инструменты Windows и приводят к ошибкам тестов. Удалите их из вашего пути во время тестирования, чтобы избежать этих ошибок.

Чтобы увидеть вывод конкретных сбоев тестов, запустите утилиту из каталога t:

# assuming you're starting from the win32 directory
cd ..\win32
.\perl harness <list of tests>

Пожалуйста, сообщите о любых других ошибках, как описано в разделе "ОШИБКИ И ОСОБЕННОСТИ".

Установка Perl в Windows

Введите "dmake install" (или "gmake install", "nmake install"). Это поместит только что собранный perl и библиотеки в каталог, на который INST_TOP указывает в файле Makefile. Он также установит документацию pod в $INST_TOP\$INST_VER\lib\pod и HTML-версии того же в $INST_TOP\$INST_VER\lib\pod\html.

Для использования только что установленного Perl вам необходимо добавить новую запись в переменную среды PATH: $INST_TOP\bin, например:

set PATH=c:\perl\bin;%PATH%

Если вы выбрали раскомментировать INST_VER и INST_ARCH в файле make, то структура установки немного сложнее, и вам нужно будет добавить две новые компоненты PATH: $INST_TOP\$INST_VER\bin и $INST_TOP\$INST_VER\bin\$ARCHNAME, например:

set PATH=c:\perl\5.6.0\bin;c:\perl\5.6.0\bin\MSWin32-x86;%PATH%

Рекомендации по использованию Perl в Windows

Переменные среды

Пути установки, которые вы задаёте во время сборки, компилируются в perl, поэтому вам ничего не нужно делать дополнительно, чтобы начать использовать этот perl (кроме добавления его расположения в переменную PATH).

Если вы размещаете расширения в необычных местах, вы можете установить PERL5LIB в список путей, разделённых точками с запятой, где вы хотите, чтобы perl искал библиотеки. Ищите описания других переменных среды, которые вы можете установить, в perlrun.

Вы также можете управлять оболочкой, которую использует perl для выполнения команд system() и обратных кавычек, через PERL5SHELL. См. perlrun.

Perl не зависит от реестра, но он может искать определённые значения по умолчанию, если вы их туда поместите, если это не отключено во время сборки с помощью USE_NO_REGISTRY. При запуске процесса Perl проверяет, существуют ли HKEY_CURRENT_USER\Software\Perl и HKEY_LOCAL_MACHINE\Software\Perl. Если ключи существуют, они будут проверяться на протяжении всего выполнения процесса Perl для определённых записей. Записи в HKEY_CURRENT_USER\Software\Perl переопределяют записи в HKEY_LOCAL_MACHINE\Software\Perl. В ключах могут быть установлены одна или несколько следующих записей (типа REG_SZ или REG_EXPAND_SZ):

lib-$]        version-specific standard library path to add to @INC
lib           standard library path to add to @INC
sitelib-$]    version-specific site library path to add to @INC
sitelib       site library path to add to @INC
vendorlib-$]  version-specific vendor library path to add to @INC
vendorlib     vendor library path to add to @INC
PERL*         fallback for all %ENV lookups that begin with "PERL"

Обратите внимание, что $] в приведенном выше примере не является буквальным. Замените его на ту версию perl, которую вы хотите использовать в этой записи, например, 5.6.0. Пути должны быть разделены точками с запятой, как обычно в Windows.

Глобальный поиск файлов

По умолчанию perl обрабатывает глобальный поиск файлов с помощью расширения File::Glob, которое обеспечивает портативный поиск.

Если вы хотите, чтобы perl использовал глобальный поиск, эмулирующий особенности конвенций имён файлов DOS, вы можете рассмотреть использование File::DosGlob для переопределения внутренней реализации glob(). См. File::DosGlob для получения подробностей.

Использование perl из командной строки

Если вы привыкли использовать perl из различных командных оболочек, встречающихся в средах UNIX, вы будете менее довольны тем, что предлагает Windows в виде командной оболочки.

Важное понимание среды Windows заключается в том, что введённая вами командная строка обрабатывается дважды перед тем, как perl увидит её. Сначала ваша командная оболочка (обычно CMD.EXE) предварительно обрабатывает командную строку, чтобы обработать перенаправление, расширение переменных среды и расположение исполняемого файла для запуска. Затем исполняемый файл perl разбивает оставшуюся командную строку на отдельные аргументы, используя библиотеку времени выполнения C, на которой был построен Perl.

Особо важно отметить, что ни оболочка, ни библиотека времени выполнения не выполняют расширения шаблонов командной строки (поэтому шаблоны не нуждаются в кавычках). Кроме того, поведение цитирования оболочки и библиотеки времени выполнения является примитивным (и может быть несогласованным при использовании нестандартной оболочки). Единственный (полезный) символ кавычки — двойная кавычка ("). Она может использоваться для защиты пробелов и других специальных символов в аргументах.

Документация Windows описывает правила анализа оболочки здесь: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/cmd, а правила анализа библиотеки времени выполнения C здесь: https://msdn.microsoft.com/en-us/library/17w5ykft%28v=VS.100%29.aspx.

Вот некоторые дополнительные наблюдения, основанные на экспериментах: библиотека времени выполнения C разбивает аргументы по пробелам и передает их программам в argc/argv. Двойные кавычки могут использоваться для предотвращения разделения аргументов с пробелами. Вы можете поместить двойную кавычку в аргумент, экранировав её обратной косой чертой и поместив весь аргумент в двойные кавычки. Библиотека времени выполнения C удалит обратную косую черту и пару двойных кавычек, окружающих аргумент.

Символы перенаправления файлов "<", ">" и "|" можно заключить в двойные кавычки (хотя есть предположения, что это не всегда верно). Одинарные кавычки не обрабатываются как кавычки оболочкой или библиотекой времени выполнения C, они не удаляются оболочкой (чтобы сделать этот тип цитирования совершенно бесполезным). Также было замечено, что символ «^» ведёт себя как символ цитирования, но это, похоже, функция оболочки, и символ «^» не удаляется из командной строки, поэтому Perl его всё равно видит (и фаза библиотеки времени выполнения C не обрабатывает символ «^» как символ цитирования).

Вот несколько примеров использования оболочки "cmd":

Это печатает две двойные кавычки:

perl -e "print '\"\"' "

Это делает то же самое:

perl -e "print \"\\\"\\\"\" "

Это печатает "bar" и записывает "foo" в файл "blurch":

perl -e "print 'foo'; print STDERR 'bar'" > blurch

Это печатает "foo" ("bar" исчезает в никуда):

perl -e "print 'foo'; print STDERR 'bar'" 2> nul

Это печатает "bar" и записывает "foo" в файл "blurch":

perl -e "print 'foo'; print STDERR 'bar'" 1> blurch

Это передает "foo" в диспетчер страниц "less" и печатает "bar" на консоли:

perl -e "print 'foo'; print STDERR 'bar'" | less

Это передает "foo\nbar\n" в диспетчер страниц less:

perl -le "print 'foo'; print STDERR 'bar'" 2>&1 | less

Это передает "foo" в диспетчер страниц и записывает "bar" в файл "blurch":

perl -e "print 'foo'; print STDERR 'bar'" 2> blurch | less

Открытие полезности оболочки "command.com" в Windows 9x предоставляется читателю в качестве упражнения :)

Одной из особенно вредных проблем с командной оболочкой 4NT для Windows является то, что она (почти) всегда обрабатывает символ «%» как указание на то, что необходимо расширение переменной среды. В этой оболочке поэтому важно всегда удваивать любые символы «%», которые вы хотите увидеть в Perl (например, для переменных с хешем), даже когда они заключены в кавычки.

Создание расширений

Comprehensive Perl Archive Network (CPAN) предлагает множество расширений, некоторые из которых требуют компилятора C для построения. Обратитесь к https://www.cpan.org/ за дополнительной информацией о CPAN.

Обратите внимание, что не все расширения, доступные из CPAN, могут работать в среде Windows; перед тем, как приложить слишком много усилий к переносу модулей, которые не собираются без проблем, вы должны проверить информацию на https://www.cpantesters.org/.

Большинство расширений (требуют ли они компилятора C или нет) можно создать, протестировать и установить с помощью стандартного принципа:

perl Makefile.PL
$MAKE
$MAKE test
$MAKE install

где $MAKE — это та программа 'make', которую вы настроили для использования perl. Используйте «perl -V:make», чтобы узнать об этом. Некоторые расширения могут не предоставлять набора тестов (так что "$MAKE test" может ничего не делать или завершиться ошибкой), но большинство серьёзных расширений это делают.

Важно использовать поддерживаемую программу 'make' и убедиться, что Config.pm знает о ней. Если у вас нет nmake, вы можете получить dmake из указанного ранее места или получить старую версию nmake, которая предположительно доступна по адресу:

http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/nmake15.exe

Ещё один вариант — использовать написанный на Perl make, доступный из CPAN.

https://www.cpan.org/modules/by-module/Make/

Вы также можете использовать dmake или gmake. См. "Make" выше, как это получить.

Обратите внимание, что MakeMaker фактически генерирует файлы make с различным синтаксисом в зависимости от того, какой 'make' он считает используемым. Поэтому важно, чтобы одно из следующих значений появилось в Config.pm:

make='nmake'        # MakeMaker emits nmake syntax
make='dmake'        # MakeMaker emits dmake syntax
any other value     # MakeMaker emits generic make syntax
                        (e.g GNU make, or Perl make)

Если значение не соответствует программе 'make', которую вы хотите использовать, отредактируйте Config.pm, чтобы исправить это.

Если модуль реализует XSUB, вам понадобится один из поддерживаемых компиляторов C. Вы должны убедиться, что вы настроили среду для компилятора для компиляции из командной строки перед запуском perl Makefile.PL или любого вызова make.

Если модуль по какой-либо причине не собирается, внимательно изучите причину сбоя и сообщите об ошибках автору модуля. Если кажется, что неисправен модуль для сборки расширений, сообщите об этом со всеми подробностями о том, как произошёл сбой сборки, используя систему отслеживания ошибок GitHub по адресу https://github.com/Perl/perl5/issues.

Расширение шаблонов командной строки

Стандартные командные оболочки на операционных системах, являющихся потомками DOS (как они есть), обычно не расширяют аргументы шаблонов, предоставленные программам. Они считают, что приложение должно справиться с этим. Это обычно достигается связыванием приложения (в нашем случае perl) с начальным кодом, который обычно предоставляют библиотеки времени выполнения C. Однако это приводит к несовместимости версий perl (поскольку поведение кода расширения argv различается в зависимости от компилятора и даже содержит ошибки в некоторых компиляторах). Кроме того, это может стать источником разочарования, если вы используете такой двоичный файл perl с альтернативной оболочкой, которая *делает* расширение шаблонов.

Вместо этого следующее решение работает довольно хорошо. Преимуществами этого являются: 1) вы можете начать использовать его сразу; 2) он более мощный, потому что он будет делать правильно с шаблоном, таким как */*/*.c; 3) вы можете решить, хотите ли вы его использовать; и 4) вы можете расширить метод, чтобы добавить любые настройки (или даже совершенно другие типы расширения шаблонов).

C:\> copy con c:\perl\lib\Wild.pm
# Wild.pm - emulate shell @ARGV expansion on shells that don't
use File::DosGlob;
@ARGV = map {
             my @g = File::DosGlob::glob($_) if /[*?]/;
             @g ? @g : $_;
           } @ARGV;
1;
^Z
C:\> set PERL5OPT=-MWild
C:\> perl -le "for (@ARGV) { print }" */*/perl*.c
p4view/perl/perl.c
p4view/perl/perlio.c
p4view/perl/perly.c
perl5.005/win32/perlglob.c
perl5.005/win32/perllib.c
perl5.005/win32/perlglob.c
perl5.005/win32/perllib.c
perl5.005/win32/perlglob.c
perl5.005/win32/perllib.c

Обратите внимание, что там есть два отдельных шага: 1) вам нужно создать Wild.pm и поместить его в свой каталог perl lib. 2) Вам нужно установить переменную среды PERL5OPT. Если вы хотите, чтобы расширение шаблонов argv было по умолчанию, просто установите PERL5OPT в вашей стандартной среде запуска.

Если вы используете компилятор Visual C, вы можете получить встроенное в двоичный файл perl расширение шаблонов командной строки библиотеки времени выполнения C. Результирующий двоичный файл всегда будет расширять нецитируемые командные строки, что может не соответствовать вашим требованиям, если вы используете оболочку, которая делает это за вас. Выполняемое расширение также несколько менее мощное, чем предлагаемый выше подход.

Примечания по 64-битной Windows

Windows .NET Server поддерживает модель данных LLP64 на архитектуре Intel Itanium.

Модель данных LLP64 отличается от модели данных LP64, которая является нормой на 64-битных платформах Unix. В первом случае int и long являются 32-разрядными типами данных, а указатели имеют ширину 64 бит. Кроме того, существует отдельный целочисленный тип шириной 64 бита, __int64. В отличие от этого, модель данных LP64, которая широко распространена на платформах Unix, предоставляет int как 32-битный тип, в то время как тип long и указатели имеют 64-битную точность. Обратите внимание, что обе модели обеспечивают 64 бита адресности.

64-битная Windows, работающая на Itanium, способна прозрачно запускать 32-битные x86 двоичные файлы. Это означает, что вы могли бы использовать 32-битную сборку Perl на 64-битной системе. Учитывая это, зачем нужно создавать 64-битную сборку Perl? Вот несколько причин:

  • 64-битное собственное приложение будет работать намного эффективнее на оборудовании Itanium.

  • Нет ограничения на размер процесса в 2 ГБ.

  • Perl автоматически поддерживает большие файлы, когда он построен в 64-битной Windows.

  • Встраивание Perl в 64-битное приложение.

Запуск скриптов Perl

Скрипты Perl на UNIX используют строку "#!" (также известную как "shebang"), чтобы указать ОС, что она должна выполнить файл с помощью perl. Windows не имеет аналогичных средств для указания произвольных файлов как исполняемых.

Вместо этого все доступные методы выполнения текстовых файлов в Windows полагаются на расширение файла. Есть три способа использовать это для выполнения скриптов perl:

  1. Существует функция под названием «ассоциации расширений файлов». Она может быть изменена с помощью двух команд «assoc» и «ftype», которые входят в стандартный набор Windows. Введите «ftype /?» для получения полного примера настройки этой функции для скриптов perl (Вы что? Вы думали, Windows не поддерживает perl? :).

  2. Поскольку ассоциации файлов не работают везде, а по имеющимся данным, ассоциации файлов содержат ошибки в местах, где они работают, может быть использован старый метод обертывания скрипта perl, чтобы он выглядел как обычный пакетный файл для ОС. Процесс установки предоставляет скрипт «pl2bat.bat», который может быть использован для обертывания скриптов perl в пакетные файлы. Например:

    pl2bat foo.pl

    будет создан файл «FOO.BAT». Обратите внимание, что «pl2bat» удаляет любой суффикс .pl и добавляет суффикс .bat к сгенерированному файлу.

    Если вы используете 4DOS/NT или подобную командную оболочку, обратите внимание, что «pl2bat» использует переменную «%*» в сгенерированном пакетном файле для ссылки на все аргументы командной строки, поэтому вам может потребоваться убедиться, что данная конструкция работает в пакетных файлах. На момент написания этой статьи пользователям 4DOS/NT потребуется инструкция «ParameterChar = *» в файле 4NT.INI или им потребуется выполнить «setdos /p*» в файле запуска 4DOS/NT, чтобы это работало.

  3. Использование «pl2bat» имеет несколько проблем: имя файла изменяется, поэтому скрипты, которые полагаются на $0 для определения выполняемых действий, могут работать неправильно; выполнение «pl2bat» дублирует содержимое исходного скрипта, и поэтому этот процесс может быть трудоёмким в случае частых обновлений оригинальных скриптов. Возможен другой подход, который избегает обеих проблем.

    Доступен скрипт «runperl.bat», который может быть скопирован в любое имя файла (вместе с суффиксом .bat). Например, если вы назовёте его «foo.bat», он выполнит файл «foo» при его запуске. Поскольку вы можете запускать пакетные файлы в платформах Windows, просто набрав имя (без расширения), это эффективно выполняет файл «foo», когда вы вводите «foo» или «foo.bat». С этим методом «foo.bat» может даже находиться в другом расположении, чем файл «foo», до тех пор, пока «foo» доступен где-либо в PATH. Если ваши скрипты находятся на файловой системе, которая поддерживает символические ссылки, вы можете даже избежать копирования «runperl.bat».

    Вот отступление: скопируйте «runperl.bat» в «runperl» и введите «runperl». Объясните наблюдаемое поведение или отсутствие такового. :) Подсказка: обратите внимание на текст под названием .gnidnats llits er'uoy fi ,"lrepnur" eteled :tniH

Разное

Установлен полный набор HTML-документации, поэтому вы сможете его использовать, если на вашей системе установлен веб-браузер.

perldoc также является полезным инструментом для просмотра информации, содержащейся в документации, особенно в сочетании с просмотрщиком страниц, например, less (недавние версии которого поддерживают Windows). Возможно, вам придётся установить переменную среды PAGER, чтобы использовать определённый просмотрщик.

«perldoc -f foo» выведет информацию об операторе perl «foo».

Одна из распространённых ошибок при использовании этого порта с графической библиотекой, например, Tk, заключается в предположении, что обычное поведение Perl по открытию окна командной строки исчезнет. Это не так. Если вы хотите запустить копию perl без открытия окна командной строки, используйте исполняемый файл wperl, созданный во время процесса установки. Использование точно такое же, как и обычное perl в Windows, за исключением того, что такие опции, как -h, не работают (поскольку им нужно окно командной строки для вывода).

Если вы обнаружите ошибки в perl, вы можете сообщить о них по адресу https://github.com/Perl/perl5/issues.

ОШИБКИ И ОГРАНИЧЕНИЯ

Norton AntiVirus мешает процессу сборки, особенно если он настроен на «Автозащита, Все файлы, при открытии». В отличие от крупных приложений, процесс сборки perl открывает и изменяет множество файлов. Скан каждого файла антивирусом значительно замедляет процесс сборки. Хуже того, при PERLIO=stdio процесс сборки терпит неудачу с необычными сообщениями, так как программа проверки вирусов плохо взаимодействует с miniperl.exe при записи файлов конфигурации (похоже, она либо перехватывает часть записанного файла и обрабатывает его как подозрительный, либо программа проверки вирусов может «заблокировать» его таким образом, что препятствует обновлению miniperl).

set PERLIO=perlio

но это может быть просто удача. У других антивирусных программ могут быть аналогичные проблемы.

Расширение оболочки Git GUI для Windows, такое как TortoiseGit, замедлит процесс сборки и последующего make test, так как каждый файл проверяется на наличие состояния git сразу же после его создания и/или изменения. TortoiseGit не вызывает сбоев тестов или проблем сборки в отличие от антивирусного программного обеспечения, описанного выше, но оно вызывает аналогичное замедление. Рекомендуется использовать диспетчер задач для поиска фоновых процессов, которые используют высокую загрузку ЦП во время процесса сборки.

Некоторые встроенные функции не работают точно так, как описано в perlfunc, и некоторые не реализованы вообще. Чтобы избежать сюрпризов, особенно если у вас был предыдущий опыт работы с Perl в других операционных системах или если вы намерены написать код, который будет переносимым в другие среды, см. perlport для получения достаточно определённого списка этих различий.

Не все расширения, доступные из CPAN, могут быть успешно собраны или работать должным образом в среде Windows. См. "Настройка расширений".

Большинство вызовов, связанных с socket(), поддерживаются, но они могут вести себя не так, как на Unix-платформах. См. perlport для получения полного списка.

Обработка сигналов может не соответствовать поведению на Unix-платформах (где она не совсем «ведёт себя» так). Например, вызов die() или exit() из обработчиков сигналов вызовет исключение, поскольку большинство реализаций signal() в Windows сильно ограничены. Таким образом, сигналы могут работать только для простых вещей, таких как установка флаговой переменной в обработчике. Использование сигналов в этом порту в настоящее время следует считать неподдерживаемым.

Пожалуйста, отправляйте подробные описания любых проблем и решений, которые вы можете найти, по адресу <https://github.com/Perl/perl5/issues>, а также вывод, полученный от perl -V.

Благодарности

Использование верблюда в контексте Perl является торговой маркой O'Reilly and Associates, Inc. Используется с разрешения.

Авторы

Гэри Нг <71564.1743@CompuServe.COM>
Гурусами Сарати <gsar@activestate.com>
Ник Инг-Симмонс <nick@ing-simmons.net>
Жан Дюбуа <jand@activestate.com>
Стив Хэй <steve.m.hay@googlemail.com>

Этот документ поддерживается Жаном Дюбуа.

См. также

perl

История

Этот порт был первоначально предложен Гэри Нг около 5.003_24 и позаимствован из порта Hip Communications, который был доступен в то время. С тех пор различные люди внесли многочисленные изменения.

Поддержка GCC/mingw32 была добавлена в 5.005 (Ник Инг-Симмонс).

Поддержка PERL_OBJECT была добавлена в 5.005 (ActiveState Tool Corp).

Поддержка эмуляции fork() была добавлена в 5.6 (ActiveState Tool Corp).

Поддержка Win9x была добавлена в 5.6 (Бенджамин Штуль).

Поддержка 64-битных Windows была добавлена в 5.8 (ActiveState Corp).

Последнее обновление: 30 апреля 2019

© 1993–2020 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.32.0/perlwin32

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API