Spec-Zone.ru › Perl 5.38

perlwin32

СОДЕРЖАНИЕ

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

ИМЯ

perlwin32 - Perl под Windows

СИНОПСИС

Инструкции по компиляции Perl под Windows 7 и более поздними версиями.

ОПИСАНИЕ

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

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

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

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

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

Microsoft Visual C++    version 12.0 or later
Intel C++ Compiler      (experimental)
Gcc by mingw.org        gcc version 3.4.5-5.3.0
Gcc by mingw-w64.org    gcc version 4.4.3 or later

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

https://osdn.net/projects/mingw/

Поставляет цепочку инструментов gcc, создающую 32-битные исполняемые файлы (которые могут использоваться как на 32-, так и на 64-битных платформах Windows)

https://mingw-w64.org

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

Компиляторы Microsoft Visual C++ теперь также распространяются бесплатно. Они доступны как «Visual C++ 2013-2022 Community Edition» и являются теми же компиляторами, что и в «Visual C++ 2013-2022 Professional».

Visual C++ 2013 может работать с XP и Windows Server 2003, но для компиляции требуется хост-система Windows 7/Windows Server 2012. Более подробную информацию см. на страницах https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2013-compatibility-vs и https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2013-sysrequirements-vs

Компилятор MinGW64 доступен по адресу https://mingw-w64.org. Последний фактически является кросс-компилятором, нацеленным на Win64. Также доступен урезанный компилятор (без java или gfortran), подходящий для компиляции perl: https://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++, вы можете использовать nmake, поставляемую с Visual C++. Вы также можете использовать gmake вместо nmake. Для компиляции с помощью gcc нужен gmake. nmake не поддерживается для компиляции с gcc. Параллельная компиляция поддерживается только gmake, а не nmake.

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

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

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

Microsoft Visual C++

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

Microsoft Visual C++ 2013-2022 Community Edition

Эти бесплатные версии Visual C++ 2013-2022 Professional содержат те же компиляторы и компоновщики, что и в полных версиях, а также всё необходимое для компиляции Perl.

Эти пакеты можно загрузить с сайта https://visualstudio.microsoft.com/.

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

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

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

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

Microsoft C++ Build Tools

Также доступна автономная (без IDE) версия инструментария для сборки, упомянутого выше, содержащая компилятор MSVC, которую можно загрузить с сайта https://visualstudio.microsoft.com/visual-cpp-build-tools/.

Также известно как Инструменты сборки для Visual Studio.

GCC

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

https://osdn.net/projects/mingw/ https://www.mingw-w64.org/

Также необходим gmake. Обычно он поставляется с MinGW, но его исполняемый файл может иметь другое имя, например, mingw32-make.exe.

Обратите внимание, что компиляция с MinGW в настоящее время завершается ошибкой при использовании версии 6.3.0 или выше.

Также обратите внимание, что компиляция в режиме 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, которая необходима для некоторых XS модулей CPAN, сохраняя при этом совместимость с объектным кодом Visual C и инфраструктурой отладки Visual C, в отличие от GCC.

Компиляция

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

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

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

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

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

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

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

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

  • Введите gmake (или nmake если вы используете эту версию make).

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

    Для тестирования режима параллельной сборки gmake, введите gmake -j2, где 2 — максимальное количество параллельных задач, которые вы хотите запустить. Многие части процесса сборки будут выполняться параллельно, но есть точки сериализации, где вы увидите, что задействован только один процессор на полную мощность. Это нормально.

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

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

Введите "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 и более поздних версиях, как описано в Microsoft: 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 от mingw, то тест 17 в ext/POSIX/t/time.t может завершиться сбоем из-за известной ошибки в этих сборках gcc: см. https://sourceforge.net/p/mingw/bugs/2152/.

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

Если вы запускаете тесты из окна оболочки emacs, вы можете увидеть сбои в op/stat.t. В этом случае выполните "gmake 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

Введите "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 в файле makefile, то структура установки немного сложнее, и вам потребуется добавить две новые компоненты 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() и backtick, с помощью 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.

Символы перенаправления файлов «<», «>» и «|» можно цитировать в двойных кавычках (хотя есть предположения, что это не всегда верно). Одинарные кавычки не обрабатываются как кавычки оболочкой или библиотекой времени выполнения, они не удаляются оболочкой (чтобы сделать этот тип цитирования совершенно бесполезным). Было замечено, что символ «^» также ведет себя как символ цитирования, но это, похоже, функция оболочки, и символ «^» не удаляется из командной строки, поэтому 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 знает о ней.

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

make='nmake'	# MakeMaker emits nmake 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, вы можете включить расширение подстановочных знаков командной строки библиотеки времени выполнения C в исполняемый файл perl. Результирующий исполняемый файл всегда будет расширять нецитируемые командные строки, что может не соответствовать вашим требованиям, если вы используете оболочку, которая делает это за вас. Выполняемое расширение также несколько менее мощное, чем предложенный выше подход.

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

Сервер Windows .NET поддерживает модель данных 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 используют строку "#!" (также известную как «шебанг») для указания операционной системе, что она должна выполнить файл с помощью 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 для 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. Используется с разрешения.

АВТОРЫ

Gary Ng <71564.1743@CompuServe.COM>
Gurusamy Sarathy <gsar@activestate.com>
Nick Ing-Simmons <nick@ing-simmons.net>
Jan Dubois <jand@activestate.com>
Steve Hay <steve.m.hay@googlemail.com>

Этот документ поддерживается Jan Dubois.

См. также

perl

ИСТОРИЯ

Этот порт был первоначально внесён Gary Ng примерно в 5.003_24 и позаимствован из порта Hip Communications, который был доступен в то время. Различные люди с тех пор внесли множество разнообразных исправлений.

Поддержка GCC/mingw32 была добавлена в 5.005 (Nick Ing-Simmons).

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

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

Поддержка Win9x была добавлена в 5.6 (Benjamin Stuhl).

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

Последнее обновление: 06 октября 2021

© 1993–2023 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.38.0/perlwin32

Spec-Zone.ru

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