perlwin32 - Perl 在 Windows 上
以下是在 Windows 7 及更高版本上构建 Perl 的说明。
在开始之前,您应该浏览 Perl 分发包解压缩到的顶级目录中的 README 文件。确保您阅读并理解此软件的发布条款。
还要确保您阅读下面"错误和注意事项",了解此移植的已知限制。
perl 顶级目录中的 INSTALL 文件包含许多仅与在类 Unix 系统上构建 Perl 的人相关的信息。特别是,您可以安全地忽略任何谈论“Configure”的信息。
您可能还想查看另一个构建可在 Windows 上运行的 perl 的选项:README.cygwin 文件,它提供了一组不同的规则来构建用于 Windows 的 perl。此方法可能会使您能够构建一个更兼容 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
请注意,最后两个实际上是竞争项目,它们都为 MS Windows 提供了完整的 gcc 工具链
提供 gcc 工具链,用于构建 32 位可执行文件(可在 32 位和 64 位 Windows 平台上使用)。
提供针对 64 位 Windows 和 32 位 Windows 平台的 gcc 工具链(尽管项目名称为“mingw-w64”,但它们不仅仅面向 64 位)。它们提供了原生 gcc 编译器和交叉编译器,这些编译器也受 perl 的 makefile 支持。
Microsoft Visual C++ 编译器现在也免费提供。它们以“Visual C++ 2013-2022 社区版”的形式提供,与“Visual C++ 2013-2022 专业版”附带的编译器相同。
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 位编译器在 64 位 Windows 操作系统上构建 perl,则应将 WIN64 环境变量设置为“undef”。此外,精简的编译器仅在 USE_ITHREADS *= define(而不是 undef)且 CFG *= Debug 行被注释掉时才能通过测试。
此端口完全支持 MakeMaker(用于构建 perl 扩展的一组模块)。因此,您应该能够构建和安装在 CPAN 站点中找到的大多数扩展。有关这方面的常规提示,请参见下面的 "Windows 上 Perl 的使用提示"。
您需要一个“make”程序来构建源代码。如果您使用的是 Visual C++,则可以使用 Visual C++ 附带的 nmake。您也可以使用 gmake 代替 nmake。使用 gcc 构建需要 gmake。nmake 不支持 gcc 构建。并行构建仅支持 gmake,不支持 nmake。
使用 Windows 自带的默认 "cmd" 终端。一些流行的 4DOS/NT 终端的版本存在不兼容性,可能会导致问题。如果构建在该终端下失败,请尝试使用 cmd 终端重新构建。
确保构建目录的路径中不包含空格。构建通常在这种情况下可以正常工作,但一些测试会失败。
Visual C++ 自带的 nmake 足以用于构建。Visual C++ 要求在运行 Visual C++ 之前在控制台中设置某些内容。为了使控制台能够运行 C 编译器,您需要事先运行 vcvarsall.bat x86
来编译 x86-32,以及 vcvarsall.bat amd64
来编译 x86-64。在典型的 Microsoft C++ 编译器产品安装中,这些批处理文件将已存在于您的 PATH
环境变量中,因此您只需在控制台中键入它们,而无需使用绝对路径。如果您需要找到批处理文件的绝对路径,它通常位于类似 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC 的位置。对于一些较新的 Microsoft C 产品(在 ~2004 年之后发布),安装程序会在开始菜单中放置一个快捷方式,用于启动一个新的控制台窗口,该窗口已为您的目标架构(x86-32 或 x86-64 或 IA64)设置了控制台。对于较新的编译器,您也可以选择使用旧的批处理文件。
这些免费版本的 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
之一。
还有一个独立的(无 IDE)版本的上述构建工具,其中包含可从 https://visualstudio.microsoft.com/visual-cpp-build-tools/ 下载的 MSVC 编译器。
这也称为 Visual Studio 构建工具。
Perl 可以使用 MinGW (版本 3.4.5 或更高) 或 MinGW64 (版本 4.4.3 或更高) 中的 gcc 编译。可以从这里下载
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++ 编译器的实验性支持。编辑 win32/Makefile 并为安装 Intel C 的 Visual C 选择正确的 CCTYPE
。还要取消注释 __ICC
以启用 Visual C 上的 Intel 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 不同。
确保您位于 perl 顶层目录下的 win32 子目录中。此目录包含一个 Makefile,它将与 Visual C++ 附带的 nmake
版本一起使用,以及一个 GNU make GNUmakefile,它将适用于所有支持的编译器。gmake
makefile 中的默认值设置为使用 MinGW/gcc 构建。
编辑 GNUmakefile(或 Makefile,如果您使用的是 nmake)并更改 INST_DRV 和 INST_TOP
的值。您还可以启用各种构建标志。这些在 makefile 中有说明。
请注意,通常不建议尝试使用 INST_DRV
和 INST_TOP
设置为先前构建中已存在路径的路径来构建 perl
。特别是,这可能会导致 lib/ExtUtils/t/Embed.t 测试出现问题,该测试尝试构建测试程序,并可能最终针对已安装的 perl
的 lib/CORE 目录而不是正在测试的目录进行构建。
您需要确保CCTYPE
设置正确,并且CCHOME
指向您安装编译器的目录。对于 GCC,这应该是包含bin、include和lib目录的目录。
如果使用 mingw-w64.org 提供的交叉编译器进行构建,您需要取消注释GNUmakefile中设置GCCCROSS
的行。仅当使用交叉编译器时才执行此操作,即仅当bin文件夹不包含gcc.exe时。(交叉编译器不提供gcc.exe、g++.exe、ar.exe等。相反,所有这些可执行文件都以x86_64-w64-mingw32-
为前缀。)
Visual C++ 的 makefile 中CCHOME
的默认值可能不适用于某些版本。请确保默认值存在且有效。
如果您想将一些核心扩展静态地构建到perl
的 DLL 中,请在STATIC_EXT
宏中指定它们。
请务必仔细阅读 makefile 顶部附近的说明。
键入gmake
(如果您使用的是该版本的make
,则键入nmake
)。
这应该构建所有内容。具体来说,它将在 perl 的顶层创建perl.exe、perl538.dll,以及lib\auto目录下的各种其他扩展 DLL。如果构建因任何原因失败,请确保您已正确执行了前面的步骤。
要尝试gmake
的并行模式,请键入gmake -j2
,其中2
是您要运行的并行作业的最大数量。构建过程中的许多内容将并行运行,但存在序列化点,您将看到只有一个 CPU 达到最大值。这是正常的。
如果您对构建 C 代码足够精通,这里有一个建议,可以加快构建perl
以及之后的make test
的速度。尝试将您的PATH
环境变量保持在尽可能少的文件夹数量(请记住将您的 C 编译器的文件夹保留在那里)。C:\WINDOWS\system32或C:\WINNT\system32(取决于您的操作系统版本)应该是PATH
中的第一个文件夹,因为cmd.exe
是在构建和后续测试期间最常启动的程序。
键入“gmake test”(或“nmake test”)。这将运行测试套件中的大多数测试(许多测试将被跳过)。
不应该出现测试失败。
如果您使用 Visual C++ 2013 构建,则目前三个测试可能会因与夏令时相关的问题而失败:t/io/fs.t、cpan/HTTP-Tiny/t/110_mirror.t 和 lib/File/Copy.t。这些失败是由 VC++ 2013 中 CRT 的错误引起的,这些错误在 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可能会崩溃(在其所有测试通过后)。这是由于 Windows 10 2018 年 4 月更新中引入的通用 CRT 的回归,将在 2019 年 5 月更新中修复,如此处所述:https://developercommunity.visualstudio.com/content/problem/519486/setlocalelc-numeric-iso-latin-16-fails-then-succee.html.
如果您使用 mingw 中的某些版本的 gcc(例如 4.8.1)构建,则ext/POSIX/t/time.t可能会因这些 gcc 构建中的已知错误而导致测试 17 失败:请参阅 https://sourceforge.net/p/mingw/bugs/2152/.
如果您使用除本机“cmd.exe”以外的命令 shell,或者您从包含空格的路径构建,则可能会出现一些测试失败。所以不要这样做。
如果您从 emacs shell 窗口运行测试,您可能会在 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" 中的说明报告任何其他失败。
键入“gmake install”(“nmake install”)。这会将新构建的 perl 和库放在 Makefile 中 INST_TOP
指向的任何位置。它还会将 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%
如果您选择在 makefile 中取消注释 INST_VER
和 INST_ARCH
,那么安装结构会稍微复杂一些,您需要添加两个新的 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 中,因此您无需执行任何其他操作即可开始使用该 perl(除了将它的位置添加到您的 PATH 变量中)。
如果您将扩展放在不寻常的位置,您可以将 PERL5LIB 设置为一个由分号分隔的路径列表,perl 将在这些路径中查找库。在 perlrun 中查找有关您可以设置的其他环境变量的描述。
您还可以通过 PERL5SHELL 控制 perl 用于运行 system() 和反引号命令的 shell。请参阅 perlrun。
Perl 不依赖于注册表,但如果选择将它们放在那里,它可以查找某些默认值,除非在构建时使用 USE_NO_REGISTRY 禁用。在 Perl 进程启动时,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。
如果您习惯于在 UNIX 环境中使用各种命令行 shell 来使用 Perl,那么您对 Windows 提供的命令 shell 会感到不满意。
了解 Windows 环境的关键是,您输入的命令行在 Perl 看到它之前会经过两次处理。首先,您的命令 shell(通常是 CMD.EXE)会预处理命令行,以处理重定向、环境变量扩展和要运行的可执行文件的位置。然后,Perl 可执行文件使用 Perl 所构建的 C 运行时库将剩余的命令行拆分为各个参数。
特别需要注意的是,shell 和 C 运行时都不会对命令行参数进行任何通配符扩展(因此通配符不需要加引号)。此外,shell 和 C 运行时的引号行为充其量是基本的(并且如果您使用的是非标准 shell,则可能不一致)。唯一(有用)的引号字符是双引号(")。它可以用来保护参数中的空格和其他特殊字符。
Windows 文档在此处描述了 shell 解析规则: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 运行时将剥离反斜杠和围绕参数的双引号对。
文件重定向字符“<”、“>”和“|”可以用双引号引起来(尽管有一些建议表明这可能并不总是正确的)。单引号不被 shell 或 C 运行时视为引号,它们不会被 shell 剥离(只是为了使这种类型的引号完全无用)。还观察到插入符号“^”的行为类似于引号字符,但这似乎是 shell 功能,并且插入符号不会从命令行中剥离,因此 Perl 仍然可以看到它(并且 C 运行时阶段不会将插入符号视为引号字符)。
以下是“cmd” shell 的一些使用示例
这将打印两个双引号
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
探索 Windows 9x 上“command.com” shell 的用处留作读者的练习 :)
Windows 的 4NT 命令 shell 的一个特别有害的问题是,它(几乎)总是将 % 字符视为需要环境变量扩展的指示。在这个 shell 下,因此重要的是始终将要让 Perl 看到的任何 % 字符加倍(例如,对于哈希变量),即使它们被引用。
综合 Perl 档案网络 (CPAN) 提供了大量的扩展,其中一些需要 C 编译器才能构建。在 https://www.cpan.org/ 中查找有关 CPAN 的更多信息。
请注意,并非所有来自 CPAN 的扩展都可以在 Windows 环境中工作;您应该在 https://www.cpantesters.org/ 中查看信息,然后再投入太多精力移植那些不容易构建的模块。
大多数扩展(无论它们是否需要 C 编译器)都可以使用标准口诀进行构建、测试和安装
perl Makefile.PL
$MAKE
$MAKE test
$MAKE install
其中 $MAKE 是您已配置 perl 使用的任何“make”程序。使用“perl -V:make”找出这是什么。一些扩展可能不提供测试套件(因此“$MAKE test”可能不会执行任何操作或失败),但大多数严肃的扩展都提供。
重要的是您使用受支持的“make”程序,并确保 Config.pm 知道它。
请注意,MakeMaker 实际上会根据它认为您正在使用的“make”发出语法不同的 makefile。因此,重要的是以下值之一出现在 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 后代操作系统(例如)上的默认命令 shell 通常不会扩展提供给程序的通配符参数。他们认为这是应用程序的工作。这通常通过将应用程序(在本例中为 perl)与 C 运行时库通常提供的启动代码链接来实现。但是,这样做会导致 perl 版本不兼容(因为 argv 扩展代码的行为因编译器而异,并且在某些编译器上甚至存在错误)。此外,如果您将此类 perl 二进制文件与 *确实* 扩展通配符的备用 shell 一起使用,可能会导致沮丧。
相反,以下解决方案效果很好。它的优点是 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 二进制文件中。生成的二进制文件将始终扩展未引用的命令行,如果你使用为你执行此操作的 shell,这可能不是你想要的。完成的扩展也比上面建议的方法稍微不那么强大。
Windows .NET Server 在 Intel Itanium 架构上支持 LLP64 数据模型。
LLP64 数据模型与 64 位 Unix 平台上通用的 LP64 数据模型不同。在 LLP64 中,int
和 long
都是 32 位数据类型,而指针是 64 位宽。此外,还存在一个单独的 64 位宽整数类型,__int64
。相比之下,Unix 平台上普遍存在的 LP64 数据模型将 int
作为 32 位类型,而 long
类型和指针都是 64 位精度。请注意,两种模型都提供 64 位寻址能力。
运行在 Itanium 上的 64 位 Windows 能够透明地运行 32 位 x86 二进制文件。这意味着您可以在 64 位系统上使用 32 位版本的 Perl。鉴于此,为什么要构建 64 位版本的 Perl 呢?以下是一些原因:
64 位原生应用程序在 Itanium 硬件上运行效率更高。
进程大小没有 2GB 的限制。
在 64 位 Windows 下构建时,Perl 会自动提供大文件支持。
将 Perl 嵌入到 64 位应用程序中。
UNIX 上的 Perl 脚本使用 "#! "(也称为 "shebang")行来指示操作系统使用 perl 执行文件。Windows 没有类似的方法来指示任意文件是可执行文件。
相反,所有可用的在 Windows 上执行纯文本文件的方法都依赖于文件 "扩展名"。有三种方法可以使用它来执行 perl 脚本
有一个名为 "文件扩展名关联" 的功能。可以通过 Windows 自带的两个命令 "assoc" 和 "ftype" 来操作它。输入 "ftype /?" 以获取有关如何为 perl 脚本设置此功能的完整示例(你说什么?你以为 Windows 不支持 perl 吗?:))。
由于文件关联并非在所有地方都适用,并且据报道在文件关联起作用的地方存在错误,因此可以使用将 perl 脚本包装起来使其看起来像一个常规批处理文件给操作系统的旧方法。安装过程提供了 "pl2bat.bat" 脚本,可用于将 perl 脚本包装成批处理文件。例如
pl2bat foo.pl
将创建文件 "FOO.BAT"。请注意,"pl2bat" 会剥离任何 .pl 后缀并向生成的添加 .bat 后缀。
如果您使用 4DOS/NT 或类似的命令行 shell,请注意 "pl2bat" 在生成的批处理文件中使用 "%*" 变量来引用所有命令行参数,因此您可能需要确保该结构在批处理文件中有效。截至撰写本文时,4DOS/NT 用户需要在他们的 4NT.INI 文件中添加 "ParameterChar = *" 语句,或者需要在 4DOS/NT 启动文件中执行 "setdos /p*" 来启用此功能。
使用“pl2bat”存在一些问题:文件名会被更改,因此依赖于$0
来查找要执行操作的脚本可能无法正常运行;运行“pl2bat”会复制原始脚本的内容,因此如果原始脚本经常更新,此过程可能需要大量维护。可以使用另一种方法来避免这两个问题。
提供了一个名为“runperl.bat”的脚本,可以将其复制到任何文件名(以及.bat后缀)。例如,如果您将其命名为“foo.bat”,它将在执行时运行文件“foo”。由于您可以在 Windows 平台上简单地通过键入名称(不带扩展名)来运行批处理文件,因此这实际上是在您键入“foo”或“foo.bat”时运行文件“foo”。使用这种方法,“foo.bat”甚至可以位于与文件“foo”不同的位置,只要“foo”在 PATH 中的某个位置可用即可。如果您的脚本位于允许符号链接的文件系统上,您甚至可以避免复制“runperl.bat”。
这里有一个题外话:将“runperl.bat”复制到“runperl”,然后键入“runperl”。解释观察到的行为,或缺乏行为。:) 提示::tniH ,“lrepnur” eteled fi er'uoy llits gnidnats .
安装了完整的 HTML 文档集,因此如果您在系统上安装了 Web 浏览器,您应该可以使用它。
perldoc
也是一个用于浏览文档中包含的信息的有用工具,尤其是在与像less
这样的分页器(最近的版本支持 Windows)结合使用时。您可能需要设置 PAGER 环境变量以使用特定的分页器。“perldoc -f foo”将打印有关 perl 运算符“foo”的信息。
使用此端口与像Tk
这样的 GUI 库时,一个常见的错误是假设 Perl 打开命令行窗口的正常行为会消失。情况并非如此。如果您想启动一个不打开命令行窗口的perl
副本,请使用安装过程中构建的wperl
可执行文件。用法与 Windows 上的普通perl
完全相同,只是像-h
这样的选项不起作用(因为它们需要命令行窗口才能打印到)。
如果您在 perl 中发现错误,您可以将其报告到https://github.com/Perl/perl5/issues。
诺顿杀毒软件会干扰构建过程,特别是当设置为“自动保护,所有文件,打开时”时。与大型应用程序不同,perl 构建过程会打开和修改许多文件。让杀毒软件扫描每一个文件会显著减慢构建过程。更糟糕的是,使用 PERLIO=stdio,构建过程会因病毒检查器与 miniperl.exe 写入配置文件的交互而失败,并出现奇怪的消息(似乎它会捕获写入的文件部分并将其视为可疑,或者病毒检查器可能以某种方式“锁定”它,从而阻止 miniperl 更新它)。构建过程确实完成了
set PERLIO=perlio
但这可能只是运气。其他杀毒软件也可能存在类似问题。
Windows 的 git GUI shell 扩展(如 TortoiseGit)会导致构建和之后的 make test
运行速度慢得多,因为每个文件在创建和/或修改后都会立即检查其 git 状态。与上面描述的杀毒软件不同,TortoiseGit 不会导致任何测试失败或构建问题,但它确实会导致类似的缓慢。建议使用任务管理器查找构建过程中使用高 CPU 量的后台进程。
一些内置函数的行为与 perlfunc 中的文档不完全一致,并且一些函数根本没有实现。为了避免意外,特别是如果您之前在其他操作系统环境中接触过 Perl,或者您打算编写可在其他环境中移植的代码,请参阅 perlport,其中包含这些差异的比较完整列表。
并非所有来自 CPAN 的扩展都可以在 Windows 环境中构建或正常工作。请参阅 "构建扩展"。
大多数 socket()
相关调用都受支持,但它们的行为可能与 Unix 平台上的行为不同。请参阅 perlport 以获取完整列表。
信号处理的行为可能与 Unix 平台上的行为不同(在 Unix 平台上,信号处理也不完全“正常”)。例如,从信号处理程序调用 die()
或 exit()
会导致异常,因为 Windows 上大多数 signal()
实现都严重受限。因此,信号可能仅适用于设置处理程序中的标志变量等简单操作。在此端口下使用信号目前应被视为不受支持。
请在 <https://github.com/Perl/perl5/issues> 中报告您可能遇到的任何问题和解决方案的详细描述,以及 perl -V
生成的输出。
使用骆驼作为 Perl 主题的商标归 O'Reilly and Associates, Inc. 所有。经许可使用。
此文档由 Jan Dubois 维护。
此端口最初由 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)。
最后更新时间:2021 年 10 月 6 日