目錄

名稱

perlwin32 - Windows下的Perl

用法

這些是在Windows 7及更高版本下建置Perl的指示。

描述

在開始之前,您應該先瀏覽一下Perl發行版解壓縮後的頂層目錄中的README文件。確保您已閱讀並理解軟件的發布條款。

同時,請確保您閱讀下面的"錯誤和注意事項"以瞭解此端口的已知限制。

perl頂層目錄中的INSTALL文件包含許多只針對在類Unix系統上建置Perl的人有用的信息。特別是,您可以安全地忽略任何涉及“配置”的信息。

您可能還想查看另一種在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 工具鏈。

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

提供建構 32 位可執行檔的 gcc 工具鏈(可在 32 位和 64 位 Windows 平台上使用)。

https://mingw-w64.org

提供針對 64 位 Windows 和 32 位 Windows 平台的 gcc 工具鏈(儘管項目名稱為 "mingw-w64",但它們不僅僅針對 64 位)。它們提供本機 gcc 編譯器和交叉編譯器,也受 Perl 的 Makefile 支援。

微軟的 Visual C++ 編譯器現在也是免費提供的。它們作為 "Visual C++ 2013-2022 社群版" 提供,與 "Visual C++ 2013-2022 專業版" 一樣。這些編譯器與 "Visual C++ 2013-2022 專業版" 捆綁發送。

Visual C++ 2013 能夠針對 XP 和 Windows Server 2003 进行编译,但構建主機要求是 Windows 7/Windows Server 2012。更多詳細資訊請參閱 https://docs.microsoft.com/zh-tw/visualstudio/productinfo/vs2013-compatibility-vs 和 https://docs.microsoft.com/zh-tw/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 的使用提示"。

在Windows上設置Perl

Make

您需要一個“make”程序來構建源代碼。如果您使用的是Visual C++,您可以使用隨Visual C++提供的nmake。您也可以使用gmake代替nmake。使用gcc構建需要使用gmake。nmake不支持gcc構建。僅gmake支持並行構建,而nmake不支持。

命令行殼

使用Windows附帶的默認“cmd”殼。某些流行的4DOS/NT殼的版本可能存在不兼容性,這可能會給您帶來麻煩。如果在該殼下構建失敗,請嘗試使用cmd殼重新構建。

確保構建目錄的路徑不包含空格。構建通常在這種情況下工作,但有些測試會失敗。

Microsoft Visual C++

隨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社群版

這些免費版本的Visual C++ 2013-2022專業版包含與完整版本一起提供的相同編譯器和鏈接器,並且包含構建Perl所需的所有內容。

可以從https://visualstudio.microsoft.com/下載這些套件。

安裝Visual C++ 2013-2022社群版,然後使用以下命令設置您的環境,例如

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

(假設選擇了默認安裝位置)。

現在,Perl應該可以使用win32/Makefile進行構建。您需要編輯該文件,將CCTYPE設置為MSVC120-MSVC143中的一個。

Microsoft C++構建工具

還有一個獨立(無IDE)版本的上述構建工具,其中包含可從https://visualstudio.microsoft.com/visual-cpp-build-tools/下載的MSVC編譯器。

這也被稱為Visual Studio構建工具

GCC

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。

請注意,目前無法使用版本6.3.0或更新版本的MinGW進行構建。

還要注意,目前無法使用MinGW 3.4.5和4.7.2或更新版本以及MinGW64 64位元版本6.3.0或更新版本進行C++模式構建。

Intel C++編譯器

已添加了對使用Intel C++編譯器的實驗性支持。編輯win32/Makefile並選擇安裝了Intel C的Visual C的正確CCTYPE。同時取消註釋__ICC以啟用Intel C對Visual C的支持。要設置構建環境,從「開始」功能表選擇適當的IA-32 Visual Studio 20__模式或Intel 64 Visual Studio 20__模式。然後在該提示方塊中像平常一樣運行nmake

只有測試過Intel C++編譯器v12.1。其他版本可能也會起作用。與GCC不同,使用Intel C++編譯器而不是Visual C的好處是具有C99兼容性,這是一些CPAN XS模塊所需的,同時保持與Visual C對象代碼和Visual C調試基礎設施的兼容性。

構建

在 Windows 上測試 Perl

輸入 "gmake test" (或 "nmake test")。這將運行大多數測試套件中的測試(許多測試將被跳過)。

不應該有任何測試失敗。

如果您使用 Visual C++ 2013 進行構建,則目前有三個測試可能會因夏令時相關問題而失敗:t/io/fs.tcpan/HTTP-Tiny/t/110_mirror.tlib/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。同時,如果您需要修復的 statutime 函數,請查看 CPAN 分發 Win32::UTCFileTime。

如果您使用 Visual C++ 2015 或更高版本進行構建,那麼 ext/XS-APItest/t/locale.t 可能會崩潰(在其所有測試都通過後)。這是由於通用 CRT 中的回歸,在 Windows 10 2018 年 4 月更新中引入的,並將在 2019 年 5 月更新中修復,如此處所解釋的: https://developercommunity.visualstudio.com/content/problem/519486/setlocalelc-numeric-iso-latin-16-fails-then-succee.html

如果您使用 mingw 的某些版本(例如 4.8.1)進行構建,則 ext/POSIX/t/time.t 可能會因這些 gcc 構建中的已知錯誤而在測試 17 中失敗:請參閱 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>

請按照 "錯誤和注意事項" 下描述的方法報告任何其他失敗。

在 Windows 上安裝 Perl

輸入 "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_VERINST_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%

在 Windows 上使用 Perl 的提示

環境變數

在構建過程中設置的安裝路徑會被編譯進 perl 中,因此您不需要做任何額外的事情來開始使用該 perl(除了將其位置添加到您的 PATH 變量中)。

如果您將擴展放在不尋常的位置,您可以將 PERL5LIB 設置為以分號分隔的路徑列表,perl 將在其中查找庫。查找其他您可以設置的環境變數的描述,請參閱 perlrun

您還可以通過 PERL5SHELL 控制 perl 用於運行 system() 和反引號命令的 shell。參見 perlrun

Perl 不依賴於註冊表,但如果您選擇將它們放在那裡,它可以查找某些默認值,除非在構建時使用 USE_NO_REGISTRY 禁用。在 Perl 過程開始時,Perl 會檢查 HKEY_CURRENT_USER\Software\PerlHKEY_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 上,路徑必須用分號分隔。

文件 Globbing

默認情況下,perl 使用 File::Glob 擴展來處理文件 Globbing,它提供了可移植的 Globbing。

如果您希望 Perl 使用模擬 DOS 檔名慣例的簡式磨砂,您可能會考慮使用 File::DosGlob 來覆蓋內部 glob() 實作。詳情請參閱 File::DosGlob

使用 Perl 從命令列

如果您習慣於在 UNIX 環境中的各種命令列殼中使用 Perl,您將對 Windows 提供的命令殼感到不滿。

了解 Windows 環境的關鍵是,在 Perl 看到它之前,您輸入的命令列會被處理兩次。首先,您的命令殼(通常是 CMD.EXE)預處理命令列,以處理重定向、環境變數展開和要運行的可執行文件的位置。然後,perl 可執行文件將剩餘的命令列分割為個別的參數,使用 Perl 建構的 C 運行時庫。

特別重要的是,無論是殼還是 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" 導入較小的分頁器

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 命令殼的一個特別棘手的問題是,它(幾乎)總是將 % 字符視為需要環境變量展開的指示。在此殼下,因此重要的是始終將您希望 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 以修復它。

如果模塊實現了 XSUBs,則需要一個受支持的 C 編譯器。您必須確保在運行 perl Makefile.PL 或任何 make 調用之前已經為命令行編譯設置了編譯器的環境。

如果某個模塊由於某些原因無法構建,請仔細查找失敗的原因,並將問題報告給模塊作者。如果看起來擴展構建支持存在問題,請使用https://github.com/Perl/perl5/issues 的 GitHub 問題跟踪器報告所有失敗構建的詳細信息。

命令行通配符擴展

在 DOS 衍生的操作系统上,默认的命令 shell(如果有的话)通常不会展开供程序使用的通配符参数。他们认为这是应用程序处理的工作。通常通过将应用程序(在我们的情况下是 Perl)与 C 运行时库通常提供的启动代码链接来实现。然而,这样做会导致不兼容的 Perl 版本(因为 argv 展开代码的行为取决于编译器,并且甚至在某些编译器上是有 bug 的)。此外,如果您将这样的 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 编译器,您可以在 Perl 二进制文件中内置 C 运行时的命令行通配符展开。生成的二进制文件将始终展开未引用的命令行,如果您使用一个为您执行此操作的 shell,那可能不是您想要的。所做的扩展也比上面建议的方法稍微弱一些。

64 位 Windows 注释

Windows .NET Server 支持 Intel Itanium 架构上的 LLP64 数据模型。

LLP64 数据模型与 64 位 Unix 平台上的 LP64 数据模型不同。在前者中,intlong 都是 32 位数据类型,而指针宽度为 64 位。此外,还有一个单独的 64 位宽整数类型 __int64。相比之下,在 Unix 平台上普遍存在的 LP64 数据模型提供 int 作为 32 位类型,而 long 类型和指针都具有 64 位精度。请注意,这两种模型都提供 64 位的可寻址性。

运行在 Itanium 上的 64 位 Windows 能够透明地运行 32 位 x86 二进制文件。这意味着您可以在 64 位系统上使用 32 位的 Perl 构建。鉴于此,为什么会想要构建 64 位 Perl 构建?以下是一些您可能要费心构建 64 位 Perl 构建的原因。

  • 64 位本机应用程序在 Itanium 硬件上运行效率更高。

  • 进程大小没有 2GB 限制。

  • 在 64 位 Windows 下构建 Perl 时,Perl 会自动提供大文件支持。

  • 在 64 位应用程序中嵌入 Perl。

執行 Perl 腳本

在 UNIX 上,Perl 腳本使用“#!”(也稱為“ shebang”)行來告訴作業系統應該使用 perl 執行該文件。Windows 沒有類似的方法來指示任意文件是可執行的。

相反,Windows 上執行純文本文件的所有可用方法都依賴於文件“擴展名”。有三種方法可以使用這個來執行 perl 腳本

  1. 有一個名為“文件擴展名關聯”的設施。可以通過Windows標準的兩個命令“assoc”和“ftype”來操縱它。輸入“ftype /?”以獲得如何為 perl 腳本設置此設置的完整示例(你以為Windows不準備好 perl 了嗎?:)。

  2. 由於文件關聯在某些情況下不起作用,而且在它起作用的情況下報告了錯誤,因此可以使用將 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*”以使其正常工作。

  3. 使用“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”。解釋觀察到的行為,或缺乏行為。:)提示:.gnidnats llits er'uoy fi,“lrepnur” eteled:tniH

其他事項

完整的 HTML 文件說明已安裝,因此如果您的系統安裝了網頁瀏覽器,您應該可以使用它。

perldoc 也是一個有用的工具,用於瀏覽文件中包含的信息,特別是與像 less 這樣的分頁器結合使用時(最近的版本支援 Windows)。您可能需要設置 PAGER 環境變數以使用特定的分頁器。“perldoc -f foo”將打印有關 Perl 運算符 “foo”的信息。

在將此端口與像 Tk 這樣的 GUI 库一起使用時,一個常見的錯誤是假設 Perl 的正常行為,即打開命令行窗口,將會消失。這並不是事實。如果您想啟動一個不打開命令行窗口的 perl 副本,請使用安裝過程中建立的 wperl 可執行文件。在 Windows 上,使用方式與正常的 perl 完全相同,只是像 -h 這樣的選項不起作用(因為它們需要命令行窗口才能打印)。

如果您在 perl 中發現錯誤,您可以向https://github.com/Perl/perl5/issues報告它們。

錯誤和注意事項

Norton AntiVirus 干擾構建過程,特別是如果設置為 “AutoProtect, All Files, when Opened”。與大型應用程序不同,perl 構建過程會打開並修改大量文件。讓防病毒軟件掃描每一個文件會顯著減慢構建過程。更糟糕的是,使用 PERLIO=stdio,構建過程將因為病毒檢查器與 miniperl.exe 寫入配置文件時的交互作用而失敗(它似乎要么捕捉到部分已寫入的文件並將其視為可疑,要么病毒檢查器可能以某種方式 “鎖定” 它,從而阻止 miniperl 更新它)。構建過程可能完成,但這可能只是運氣好。其他防病毒軟件可能存在類似的問題。

set PERLIO=perlio

但可能只是運氣好。其他防病毒軟件可能會有類似的問題。

在 Windows 上,像 TortoiseGit 这样的 git GUI shell 扩展会导致构建和后续的 make test 运行速度变慢,因为每个文件在创建和/或修改时都会被检查其 git 状态。TortoiseGit 不会像上述的防病毒软件一样导致测试失败或构建问题,但会导致类似的速度下降。建议使用任务管理器查找在构建过程中使用大量 CPU 的后台进程。

一些内置函数的行为与 perlfunc 中所述的并不完全一致,有些甚至根本没有实现。为了避免出现意外情况,特别是如果您之前在其他操作环境中接触过 Perl,或者打算编写可在其他环境中移植的代码,建议参阅 perlport,其中列出了这些差异的相对确定的列表。

并非所有从 CPAN 获取的扩展都能在 Windows 环境中正确构建或正常工作。请参阅 "构建扩展"

大多数与 socket() 相关的调用都受支持,但它们的行为可能与 Unix 平台上的不同。请参阅 perlport 获取完整列表。

信号处理的行为可能与 Unix 平台上的不同(在那里也不完全“正常”:)。例如,从信号处理程序中调用 die()exit() 将引发异常,因为 Windows 上大多数 signal() 的实现都非常受限制。因此,信号可能仅用于像在处理程序中设置标志变量这样的简单操作。当前应将在此端口下使用信号视为不受支持。

请在 <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移植。自那時以來,許多人已經進行了大量的修改和各種各樣的黑客行為。

在5.005中添加了GCC/mingw32支持(Nick Ing-Simmons)。

在5.005中添加了PERL_OBJECT支持(ActiveState Tool Corp)。

在5.6中添加了fork()仿真支持(ActiveState Tool Corp)。

在5.6中添加了Win9x支持(Benjamin Stuhl)。

在5.8中添加了64位Windows支持(ActiveState Corp)。

最後更新時間:2021年10月6日