Spec-Zone.ru › Perl 5.30

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 можно загрузить с сайта http://www.microsoft.com/. Компилятор MinGW64 доступен на сайте http://mingw-w64.org. Последний фактически является кросс-компилятором, нацеленным на Win64. Также есть урезанный компилятор (без java или gfortran), подходящий для компиляции perl, доступный по адресу: http://strawberryperl.com/package/kmx/64_gcctoolchain/

ПРИМЕЧАНИЕ: Если вы используете 32-разрядный компилятор для компиляции perl на 64-разрядной операционной системе Windows, то вы должны установить переменную среды WIN64 в значение "undef". Кроме того, урезанный компилятор проходит тесты только при определении USE_ITHREADS (по сравнению с 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, необходимо предварительно выполнить файл vcvars32.bat для компиляции для x86-32 и x86-64 vcvarsall.bat x64 или vcvarsamd64.bat. В типичной установке продукта Microsoft C Compiler эти пакетные файлы уже находятся в вашей переменной среды PATH, поэтому вы можете просто ввести их в консоль без абсолютного пути. Если вам нужно найти абсолютный путь к пакетному файлу, он обычно находится где-то в каталоге C:\Program Files\Microsoft Visual Studio\VC98\Bin. В некоторых более новых продуктах Microsoft C (выпущенных после ~2004 года) установщик разместит ярлык в меню Пуск для запуска нового консольного окна с предварительно настроенной консолью для вашей целевой архитектуры (x86-32 или x86-64 или IA64). При использовании более новых компиляторов вы также можете использовать старые пакетные файлы по своему выбору.

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

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

Эти пакеты можно скачать, выполнив поиск в Центре загрузок по адресу http://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".

Эти пакеты можно скачать, выполнив поиск в Центре загрузок по адресу http://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 или более поздними версиями, а также с 64-битными MinGW64 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, а также "GNUmakefile" для GNU make или "makefile.mk" для dmake, которые будут работать со всеми поддерживаемыми компиляторами. Значения по умолчанию в файлах 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, который пытается собрать тестовую программу и может в итоге собирать её против установленного каталога perl lib/CORE, а не против того, который тестируется.

    Вам нужно будет убедиться, что 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++ может не быть правильным для некоторых версий. Убедитесь, что значение по умолчанию существует и является корректным.

    Возможно, также потребуется прокомментировать строку DELAYLOAD = ... в Makefile, если вы используете VC++ 6.0 без последнего Service Pack, и компоновщик сообщает об внутренней ошибке.

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

    ПРИМЕЧАНИЕ: параметр сборки USE_64_BIT_INT не поддерживается компилятором Visual C++ 6.0 32-битной версии.

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

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

    Это должно собрать все. В частности, это создаст perl.exe, perl530.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: см. http://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>

Пожалуйста, сообщите о любых других сбоях, как описано в разделе "BUGS AND CAVEATS".

Установка 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.

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

Документация Windows описывает правила разбора оболочки здесь: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/cmd.mspx?mfr=true, а правила разбора библиотеки C-времени здесь: http://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» в программу «less» и записывает «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 для создания. Более подробную информацию о CPAN см. на http://www.cpan.org/.

Обратите внимание, что не все расширения, доступные из CPAN, могут работать в среде Windows; вы должны проверить информацию на http://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.

http://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. 2) Вам нужно установить переменную среды PERL5OPT. Если вы хотите, чтобы расширение подстановок символов в argv было по умолчанию, просто установите PERL5OPT в вашей стандартной среде запуска.

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

Примечания по 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.30.3/perlwin32

Spec-Zone.ru

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