perlwin32
СОДЕРЖАНИЕ
НАЗВАНИЕ
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)
- http://mingw-w64.org
-
Предоставляет среду разработки gcc, нацеленную как на 64-битные, так и на 32-битные платформы Windows (несмотря на название проекта «mingw-w64», они не ориентированы только на 64-битную архитектуру). Они предоставляют родные компиляторы gcc и кросс-компиляторы, которые также поддерживаются файлами make 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 доступен по адресу 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++, вы можете использовать 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-64vcvarsall.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://www.microsoft.com/downloads/search.aspx?displaylang=en. (Предоставление точных ссылок на эти пакеты оказалось бесполезным заданием, так как ссылки постоянно меняются.)
Установите Visual C++ 2013-2022 Community, затем настройте свою среду, например, так:
C:\Program Files\Microsoft Visual Studio 12.0\Common7\Tools\vsvars32.bat(предполагая, что был выбран стандартный путь установки).
Perl теперь должен компилироваться с помощью win32/Makefile. Вам сначала нужно будет отредактировать этот файл, чтобы установить CCTYPE в одно из значений MSVC120-MSVC142.
- GCC
-
Perl можно скомпилировать с помощью gcc из MinGW (версии 3.4.5 или более поздней) или из MinGW64 (версии 4.4.3 или более поздней). Его можно загрузить здесь:
https://osdn.net/projects/mingw/ http://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++ Compiler v12.1. Другие версии, вероятно, также будут работать. Использование Intel C++ Compiler вместо Visual C имеет преимущество в совместимости с C99, что необходимо некоторым модулям CPAN XS, при одновременном сохранении совместимости с объектным кодом Visual C и инфраструктурой отладки Visual C в отличие от GCC.
Компиляция
-
Убедитесь, что вы находитесь в подкаталоге "win32" по отношению к корневому каталогу perl. Этот каталог содержит "Makefile", который будет работать с версиями nmake, поставляемыми с Visual C++, и "GNUmakefile" для GNU make, который будет работать со всеми поддерживаемыми компиляторами. По умолчанию в файле gmake настройка выполняется для сборки с использованием MinGW/gcc.
-
Отредактируйте GNUmakefile (или 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 в GNUmakefile. Делайте это только если это кросс-компилятор — то есть, только если папка bin не содержит gcc.exe. (Кросс-компилятор не предоставляет gcc.exe, g++.exe, ar.exe и т. д. Вместо этого все эти исполняемые файлы имеют префикс 'x86_64-w64-mingw32-').
Значение по умолчанию для CCHOME в файлах make для Visual C++ может быть неверным для некоторых версий. Убедитесь, что значение по умолчанию существует и является допустимым.
Если вы хотите статически скомпилировать некоторые расширения ядра в dll perl, укажите их в макросе STATIC_EXT.
Внимательно прочтите инструкции в начале файлов make.
-
Введите "gmake" (или "nmake", если вы используете этот make).
Это должно собрать всё. В частности, это создаст perl.exe, perl536.dll в корневом каталоге perl и различные другие dll расширений в каталоге lib\auto. Если сборка завершится неудачно по какой-либо причине, убедитесь, что вы правильно выполнили предыдущие шаги.
Чтобы попробовать параллельный режим gmake, введите "gmake -j2", где 2 — максимальное количество параллельных задач, которые вы хотите запустить. Ряд вещей в процессе сборки будут выполняться параллельно, но есть точки сериализации, где вы увидите, что задействован только 1 процессор. Это нормально.
Если вы достаточно опытный в сборке кода 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 может завершиться аварийно (после того, как пройдут все его тесты). Это связано с регрессией в Universal 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> Пожалуйста, сообщите о любых других ошибках, как описано в разделе "BUGS AND CAVEATS".
Установка 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 в файле 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() и 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.
Особо важно отметить, что ни оболочка, ни C-времени не выполняют никаких расширений подстановок командной строки (так что подстановки не нужно заключать в кавычки). Кроме того, поведение цитирования оболочки и C-времени является примитивным в лучшем случае (и может быть несогласованным, если вы используете нестандартную оболочку). Единственным (полезным) символом кавычек является двойная кавычка ("). Она может использоваться для защиты пробелов и других специальных символов в аргументах.
Документация 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" в "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 для сборки. Посмотрите в 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) для обработки этого. Это обычно достигается путём связывания приложения (в нашем случае, 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 используют строку "#!" (также известную как "shebang"), чтобы указать операционной системе, что она должна выполнить файл с помощью perl. Windows не имеет аналогичного способа для указания произвольных файлов как исполняемых.
Вместо этого, все доступные методы выполнения текстовых файлов в Windows зависят от расширения файла. Есть три способа использовать это для выполнения скриптов perl:
-
Существует возможность «ассоциации расширений файлов». Она может быть изменена с помощью двух команд «assoc» и «ftype», которые входят в стандартный набор Windows. Введите «ftype /?» для ознакомления с примером настройки для скриптов Perl (Вы что? Думали Windows не поддерживает Perl? :).
-
Поскольку ассоциации файлов не работают везде и, по сообщениям, содержат ошибки в тех случаях, когда работают, можно использовать старый метод обертывания скрипта Perl, чтобы он выглядел как обычный пакетный файл для ОС. Процесс установки предоставляет скрипт «pl2bat.bat», который может использоваться для обертывания скриптов Perl в пакетные файлы. Например:
pl2bat foo.plбудет создан файл «FOO.BAT». Обратите внимание, что «pl2bat» удаляет любой суффикс .pl и добавляет суффикс .bat к созданному файлу.
Если вы используете командную оболочку 4DOS/NT или аналогичную, обратите внимание, что «pl2bat» использует переменную «%*» в сгенерированном пакетном файле для ссылки на все аргументы командной строки, поэтому вам может потребоваться убедиться, что этот конструктор работает в пакетных файлах. На момент написания этой статьи пользователям 4DOS/NT потребуется инструкция «ParameterChar = *» в файле 4NT.INI или им необходимо будет выполнить «setdos /p*» в файле запуска 4DOS/NT, чтобы это работало.
-
Использование «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». Объясните наблюдаемое поведение или его отсутствие. :) Подсказка: "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>
Этот документ поддерживается Жаном Дюбуа.
См. также
История
Этот порт был первоначально представлен Гэри Нг около 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).
Последнее обновление: 06 октября 2021
© 1993–2021 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.36.0/perlwin32