perl5005delta - perl5.005 的新功能
此文件說明 5.004 版本和此版本之間的差異。
Perl 現在分為兩條開發軌道:維護軌道,對已發布的生產版本進行小而安全的更新,重點在於相容性;以及開發軌道,追求更積極的演化。維護版本(應視為生產品質)的次版本號碼從 1
到 49
,而開發版本(應視為「alpha」品質)的次版本號碼從 50
到 99
。
Perl 5.005 是新的雙軌道開發計畫的結合產品。
從 Perl 5.004_50 開始,語言內部有許多深入且廣泛的變更。如果您有在 perl 5.003 或 5.004 下建置的動態載入擴充功能,您可以繼續在 5.004 中使用它們,但您需要重新建置並重新安裝這些擴充功能才能在 5.005 中使用它們。請參閱 INSTALL 以取得升級的詳細說明。
新的 Configure 預設值旨在允許從 5.004 順利升級到 5.005,但您應該閱讀 INSTALL 以詳細了解變更,以便將其調整到您的系統。
當沒有啟用任何實驗性功能時,應該只有極少數使用者可見的 Perl 原始碼相容性問題。
如果啟用執行緒,則會套用一些警告。@_
和 $_
會變成詞彙變數。這項變更對使用者來說應該很透明,但有一些邊界條件,使用者需要了解這些問題。例如,local(@_)
會產生「無法將詞彙變數 @_ 本地化...」訊息。這項功能可能會在未來版本中啟用。
已新增一些新的關鍵字。這些關鍵字通常預期對相容性影響很小。請參閱 「新的 INIT
關鍵字」、「新的 lock
關鍵字」 和 「新的 qr//
算子」。
某些裸字詞現在是保留字。如果您使用 -w
開關要求這些保留字,使用這些保留字會觸發警告。請參閱 「our
現在是保留字」。
此版本中已針對內部元件進行大量變更,以支援新功能。
核心原始碼現在需要 ANSI C 編譯器
現在需要使用 ANSI C 編譯器來建置 Perl。請參閱 INSTALL。
現在所有 Perl 全域變數都必須使用明確的前綴來參照
現在所有可供擴充套件使用的 Perl 全域變數都有一個 PL_
前綴。新的擴充套件不應該使用非限定名稱來參照 Perl 全域變數。為了保持健全性,我們提供有限的向後相容性,以支援廣泛使用的全域變數,例如 sv_undef
和 na
(現在應該寫成 PL_sv_undef
、PL_na
等)。
如果您發現您的 XS 擴充套件無法再編譯,因為 Perl 全域變數不可見,請嘗試在全域變數中新增 PL_
前綴,然後重新建置。
強烈建議使用 Perl_
前綴來參照 Perl API 中所有不以 perl
開頭的函式。不帶 Perl_
前綴的裸函式名稱會受到巨集支援,但此支援可能會在未來版本中停止。
請參閱 perlapi。
啟用執行緒會產生原始碼相容性問題
啟用執行緒功能的 Perl 建置需要擴充功能才能使用新的 dTHR
巨集來初始化句柄以存取每個執行緒的資料。如果您看到編譯器錯誤訊息提到變數 thr
未宣告(在建置具有 XS 程式碼的模組時),您需要在引發錯誤的區塊開頭新增 dTHR;
。
API 函式 perl_get_sv("@",GV_ADD)
應使用在直接存取 perl 全域變數(例如 GvSV(errgv)
)時。API 呼叫與現有的 perl 向下相容,並提供與已啟用執行緒功能的原始碼相容。
請參閱 "C 原始碼相容性" 以取得更多資訊。
此版本與舊版本不二進位相容。所有擴充功能都需要重新編譯。此外,啟用執行緒功能建置的二進位檔與未啟用執行緒功能建置的二進位檔不相容。這對使用者來說應該是透明的,因為所有不二進位相容的組態都有其獨特的架構名稱,而擴充功能二進位檔會安裝在獨特的位置。這允許多個組態共存在同一個目錄層級中。請參閱 INSTALL。
已修正一些污染外洩和污染遺漏問題。這可能會導致過去使用舊版本運作的指令碼「失敗」。使用 -DINCOMPLETE_TAINTS 編譯會提供 perl,其對污染行為的變更量最少。但請注意,產生的 perl 會有已知的安全性問題。
使用 -e
開關的一行指令碼不再建立暫存檔案。
5.004 中引入的許多新警告已變成選用。其中一些警告仍然存在,但 perl 的新功能讓它們較少造成問題。請參閱 "新診斷"。
Perl 有新的貢獻者社會契約。請參閱 Porting/Contract。
包含在許多 Perl 文件中的授權已變更。大部分的 Perl 文件以前都在暗示的 GNU 通用公共授權或 Artistic 授權(由使用者選擇)之下。現在,許多文件明確說明其可散發的條款。這些條款通常比 GNU GPL 限制少很多。請參閱 perl 和其中列出的各個 perl 手冊頁。
警告:執行緒被視為實驗性功能。實作細節可能在未通知的情況下變更。已知有某些限制和錯誤。預計這些問題會在未來版本中修正。
請參閱 README.threads。
警告:編譯器和相關工具被視為實驗性功能。功能可能在未通知的情況下變更,且已知有某些限制和錯誤。由於編譯器完全獨立於 Perl,預設組態會建置並安裝它。
編譯器會產生 Perl 程式的三種不同轉換。C 後端會產生 C 程式碼,用來擷取 Perl 在執行開始前的狀態。它消除了常規 Perl 詮釋器的編譯時間開銷,但執行時間效能仍然大致相同。CC 後端會產生最佳化的 C 程式碼,等同於執行時間的程式碼路徑。CC 後端有更大的最佳化潛力,但目前僅實作少數最佳化。位元組碼後端會產生執行前詮釋器狀態的平台非相依位元組碼表示。因此,位元組碼後端也會消除詮釋器的大部分編譯開銷。
編譯器附帶多個有價值的公用程式。
B::Lint
是實驗性模組,用來偵測和警告可疑程式碼,特別是 -w
開關未偵測到的情況。
B::Deparse
可用來釐清 Perl 程式碼,並了解 Perl 如何最佳化特定建構。
B::Xref
會產生程式中所有變數、子常式和格式的定義和使用交叉參照報告。
B::Showlex
一眼就可顯示子常式或檔案所使用的字彙變數。
perlcc
是編譯 Perl 的簡單前端。
請參閱 ext/B/README
、B 和各編譯器模組。
Perl 的正規表示式引擎已經過徹底檢修,並支援許多新的建構式。已修正多項錯誤。
以下是條列摘要
RE 引擎中的變更
Unneeded nodes removed;
Substrings merged together;
New types of nodes to process (SUBEXPR)* and similar expressions
quickly, used if the SUBEXPR has no side effects and matches
strings of the same length;
Better optimizations by lookup for constant substrings;
Better search for constants substrings anchored by $ ;
使用 RE 引擎的 Perl 程式碼中的變更
More optimizations to s/longer/short/;
study() was not working;
/blah/ may be optimized to an analogue of index() if $& $` $' not seen;
Unneeded copying of matched-against string removed;
Only matched part of the string is copying if $` $' were not seen;
請注意,這裡僅列出主要的錯誤修正。其他錯誤修正請參閱 變更。
Backtracking might not restore start of $3.
No feedback if max count for * or + on "complex" subexpression
was reached, similarly (but at compile time) for {3,34567}
Primitive restrictions on max count introduced to decrease a
possibility of a segfault;
(ZERO-LENGTH)* could segfault;
(ZERO-LENGTH)* was prohibited;
Long REs were not allowed;
/RE/g could skip matches at the same position after a
zero-length match;
支援下列新的語法元素
(?<=RE)
(?<!RE)
(?{ CODE })
(?i-x)
(?i:RE)
(?(COND)YES_RE|NO_RE)
(?>RE)
\z
請參閱 "新的 qr//
運算子"。
Better debugging output (possibly with colors),
even from non-debugging Perl;
RE engine code now looks like C, not like assembler;
Behaviour of RE modifiable by `use re' directive;
Improved documentation;
Test suite significantly extended;
Syntax [:^upper:] etc., reserved inside character classes;
(?i) localized inside enclosing group;
$( is not interpolated into RE any more;
/RE/g may match at the same position (with non-zero length)
after a zero-length match (bug fix).
詳細資訊請參閱 malloc.c
開頭的標語。
Perl 現在包含其自己高度最佳化的 qsort() 常式。新的 qsort() 能抵抗不一致的比較函式,因此 Perl 的 sort()
在給予寫不好的排序子常式時,將不再引發核心傾印。 (之前使用的某些 C 函式庫 qsort()
具有此問題。) 在我們的測試中,新的 qsort()
在所有已知的 qsort()
實作中,平均需要最少的成對比較次數。
請參閱 perlfunc/sort
。
Perl 的訊號處理容易隨機崩潰,因為訊號會非同步地到達,而 Perl 執行階段在任意時間都不是可重入的。
不過,當啟用執行緒時,有一個可靠訊號的實驗性實作可用。請參閱 Thread::Signal
。另請參閱 安裝,了解如何建置有執行緒功能的 Perl。
內部現在只在可預測的時間重新配置 perl 堆疊。特別是,魔法呼叫絕不會觸發堆疊重新配置,因為執行時期的所有再進入都使用「堆疊堆疊」來處理。這應該會改善內部和 XSUB 中快取堆疊指標的可靠性。
如果 Perl 在腳本中遇到文字回車,它會抱怨。現在它們在程式文字中大多被視為空白。在字串文字和 here 文件中,如果文字回車與換行符號配對出現,則會被忽略;如果它們獨立存在,則會被解釋為空白。此行為表示應避免檔案中的文字回車。您可以在建置 perl 時定義預處理器符號 PERL_STRICT_CR
,以取得較舊、更相容(但較不寬容)的行為。當然,這一切與如何在字串中處理 \r
等跳脫字元無關。
請注意,這並不會神奇地讓您保留所有 DOS 格式的文字檔案。寬容處理僅適用於 perl 本身解析的檔案。如果您的 C 編譯器不允許檔案中出現回車,您可能仍然無法建置需要 C 編譯器的模組。
substr
、pos
和 vec
在 lvalue 上下文中使用時不再外洩記憶體。已修正許多影響嵌入多個直譯器的應用程式的微小外洩。
建置時間選項 -DMULTIPLICITY
已重新整理許多細節。一些以前應該是每個直譯器的全域變數現在是每個直譯器。小心處理,這允許直譯器彼此呼叫。請參閱 CPAN 上的 PerlInterp
擴充套件。
請參閱 "perlsub 中透過 local() 取得暫時值"。
%!
透明地繫結到 Errno 模組請參閱 perlref。
EXPR foreach EXPR
受支援請參閱 perlsyn。
請參閱 perlsub。
$^E
在 Win32 中有意義請參閱 perlvar。
foreach (1..1000000)
已最佳化foreach (1..1000000)
現已最佳化為計數迴圈。它不再嘗試配置 1000000 大小的清單。
Foo::
可用作隱式引號的套件名稱當與套件同名的子常式被定義時,裸字會造成不直觀的行為。因此,new Foo @args
使用呼叫 Foo()
的結果,而不是將 Foo
視為文字。在間接物件槽中撰寫裸字的建議方式為 new Foo:: @args
。請注意,當您執行此操作時,new()
方法會以 Foo
作為第一個引數呼叫,而不是 Foo::
。
exists $Foo::{Bar::}
測試套件的存在以前無法在實際建立套件前測試其存在。現在可以使用 exists $Foo::{Bar::}
來測試是否已建立 Foo::Bar
名稱空間。
請參閱 perllocale。
Perl5 一直在 64 位元系統上支援 64 位元長整數。從 5.005 開始,已新增對具有 32 位元長整數和 64 位元「長長整數」系統的實驗性支援。如果您在 config.sh 中的 ccflags 中新增 -DUSE_LONG_LONG(或在 perl.h 中手動定義它),那麼 perl 將會建置「長長整數」支援。將會有許多編譯器警告,且產生的 perl 可能無法在所有系統上執行。還有許多其他與第三方擴充功能和函式庫相關的問題。此選項的存在是為了讓人們可以處理這些問題。
die()
現在接受參考值,而 $@
會在例外陷阱中設定為該值。這使得傳播例外物件成為可能。這是一個未記錄的實驗性功能。
printf
格式轉換都會在內部處理請參閱 "printf" in perlfunc。
INIT
關鍵字INIT
子例程類似於 BEGIN
和 END
,但它們會在 perl 執行時期開始執行之前執行。例如,Perl 編譯器會使用 INIT
區塊來初始化和解析指向 XSUB 的指標。
lock
關鍵字lock
關鍵字是執行緒 Perl 中的基本同步原語。當執行緒未啟用時,它目前為 noop。
為了將對原始碼相容性的影響降到最低,此關鍵字為「弱」,亦即,除非已看到 use Thread
,否則任何同名的使用者定義子常式都會覆寫它。
qr//
算子qr//
算子在語法上類似於其他引號式算子,用於建立預編譯的正規表示式。此編譯形式現在可以在變數中明確傳遞,並內插到其他正規表示式中。請參閱 perlop。
our
現在是保留字使用 -w
開關呼叫名稱為 our
的子常式現在會引發警告。
請參閱 Tie::Array。
已新增幾個遺失的掛鉤。TIEARRAY 實作也有新的基礎類別。請參閱 Tie::Array。
substr() 現在可以在一次作業中回傳和取代。選用的第 4 個引數是取代字串。請參閱 perlfunc 中的「substr」。
帶有負 LENGTH 引數的 splice() 現在運作方式類似於 LENGTH 對 substr() 所做的。以前,負 LENGTH 會當成 0 處理。請參閱 perlfunc 中的「splice」。
當您說類似 substr($x, 5) = "hi"
的話時,substr() 回傳的純量是特殊的,因為對它的任何修改都會影響 $x。(這稱為「神奇的 lvalue」,因為「lvalue」是指定在等號左邊的東西。)通常,這正是您預期會發生的事,但如果您在可能修改 substr()、pos() 或 vec() 的環境中使用它們,例如使用 \
進行參照或作為修改 @_
的子常式的引數,Perl 會使用相同的魔法。在先前的版本中,此「魔法」只會單向進行,但現在對神奇參照的純量所做的變更(以上面的範例為 $x)也會影響神奇的 lvalue。例如,此程式碼現在會以不同的方式運作
$x = "hello";
sub printit {
$x = "g'bye";
print $_[0], "\n";
}
printit(substr($x, 0, 5));
在先前的版本中,這會列印「hello」,但現在會列印「g'bye」。
如果 $/
參照一個整數,或一個儲存整數的純量,<> 會讀取記錄,而不是列。更多資訊,請參閱 "$/" 在 perlvar 中。
Configure 有許多漸進式的改進。現在可以透過 Policy.sh,讓建立 perl 的網站範圍政策持續存在。Configure 也會記錄在 config.sh 中使用的命令列引數。
現在支援 BeOS。請參閱 README.beos。
現在在 DJGPP 工具下支援 DOS。請參閱 README.dos(在某些系統上安裝為 perldos)。
現在支援 MiNT。請參閱 README.mint。
現在支援 MPE/iX。請參閱 README.mpeix。
現在支援 MVS(又稱 OS390,又稱 Open Edition)。請參閱 README.os390(在某些系統上安裝為 perlos390)。
現在支援 Stratus VOS。請參閱 README.vos。
Win32 支援已大幅提升。支援 Perl Object,一個 Perl 的 C++ 封裝。現在在 Win32 上支援 GCC 和 EGCS。請參閱 README.win32,又稱 perlwin32。
VMS 設定系統已重新撰寫。請參閱 README.vms(在某些系統上安裝為 README_vms)。
大多數 Unix 平台的提示檔案已獲得漸進式的改進。
Perl 編譯器和工具。請參閱 B。
一個用於漂亮列印 Perl 資料的模組。請參閱 Data::Dumper。
一個用於將 Perl 值傾印至畫面的模組。請參閱 Dumpvalue。
一個用於更方便地查詢錯誤的模組。請參閱 Errno。
一個用於檔案操作的可攜式 API。
查詢和管理已安裝的模組。
操作 .packlist 檔案。
使函式/內建函式成功或 die。
perl 中 System V IPC 操作的常數和其他支援架構。
一個用於撰寫測試套件的架構。
繫結陣列的基本類別。
繫結句柄的基本類別。
Perl 執行緒建立、操作和支援。
設定子常式屬性。
編譯時期類別欄位。
控制正規表示式行為的各種實用程式。
現在您可以執行 x 秒的測試,而不必猜測要執行的正確測試數量。
保持更好的時間。
Carp 有新的函數 cluck()。cluck() 會發出警告,就像 carp() 一樣,但也會在錯誤訊息中加入堆疊回溯,就像 confess() 一樣。
CGI 已更新至 2.42 版。
新增更多 Fcntl 常數:F_SETLK64、F_SETLKW64、O_LARGEFILE,用於存取大型檔案(超過 4G)(不過 64 位元支援尚未運作,所以不用太興奮),Free/Net/OpenBSD 鎖定行為旗標 F_FLOCK、F_POSIX、Linux F_SHLCK,以及 O_ACCMODE:O_RDONLY、O_WRONLY 和 O_RDWR 的遮罩。
存取器方法 Re、Im、arg、abs、rho、theta,方法 can ($z->Re()) 現在也可以作為變異器 ($z->Re(3))。
新增一些徑向三角學(柱狀和球狀),例如大圓距離。
POSIX 現在有自己的特定於平台的提示檔案。
DB_File 支援 Berkeley DB 的 2.x 版。請參閱 ext/DB_File/Changes
。
MakeMaker 現在支援撰寫空的 makefile,提供一種方式來指定應遵守 site umask() 政策。對於 .packlist 檔案的操作和取得已安裝模組的資訊也有更好的支援。
同時具有與架構相關和與架構無關檔案的擴充功能現在總是完全安裝在與架構相關的位置。以前,可共用的部分會跨架構和跨 perl 版本共用,因此可能會被具有細微不相容性的較新版本覆寫。
請參閱 perlmodinstall 和 CPAN。
Cwd::cwd 在大多數平台上執行速度較快。
h2ph
及相關公用程式已大幅度修改。
perlcc
,編譯器的新實驗前端已推出。
原始的 GNU configure
模擬器現稱為 configure.gnu
,以避免在不區分大小寫的檔案系統中覆蓋 Configure
。
perldoc
過去執行速度相當慢。較慢的功能現在為選用。特別是,不區分大小寫的搜尋需要 -i
開關,而遞迴搜尋需要 -r
。您可以在 PERLDOC
環境變數中設定這些開關以取得舊有的行為。
Config.pm 現在有變數清單。
Porting/patching.pod 有關於如何為 Perl 建立並提交修補程式的詳細說明。
perlport 指定如何撰寫可攜式程式碼的準則。
perlmodinstall 說明如何從 CPAN
網站擷取並安裝模組。
現在已記錄更多 Perl 陷阱。請參閱 perltrap。
perlopentut 提供有關如何使用 open() 的教學課程。
perlreftut 提供有關參考的教學課程。
perlthrtut 提供有關執行緒的教學課程。
(W) 您已宣告的子常式與 Perl 關鍵字同名,而您在呼叫其中一個時未限定名稱。Perl 決定呼叫內建函式,因為該子常式未匯入。
若要強制解釋為子常式呼叫,請在子常式名稱前加上一個&符號,或使用套件限定名稱。或者,您可以匯入子常式(或假裝已使用 use subs
實用程式匯入)。
若要靜默地解釋為 Perl 算子,請在算子上使用 CORE::
前置詞(例如 CORE::log($x)
),或宣告子常式為物件方法(請參閱 "attrs")。
(F) 在雜湊中查詢的索引值,在偽雜湊的第 0 個元素中找到,是不合法的。索引值必須大於或等於 1。請參閱 perlref。
(W) 您使用了 Foo::
形式的限定裸字串,但編譯器在那之前沒有看到該命名空間的其他用法。您可能需要預先宣告一個套件?
(F) 您使用了方法呼叫的語法,但物件參考或套件名稱填入的欄位包含未定義的值。類似以下內容將會重現錯誤
$BADREF = 42;
process $BADREF 1,2,3;
$BADREF->process(1,2,3);
(P) 由於某些原因,您無法檢查腳本的檔案系統是否為 nosuid。
(F) 您在預期雜湊的地方使用了陣列,但陣列沒有關於如何從鍵對應到陣列索引的資訊。您只能對在索引 0 處具有雜湊參考的陣列執行此操作。
(F) 「轉到子常式」呼叫無法用於跳出 eval 「字串」。(您可以用它跳出 eval {BLOCK},但您可能不想要這樣做。)
(F) 您說了類似 local $ar->{'key'}
的內容,其中 $ar 是對偽雜湊的參考。這尚未實作,但您可以透過直接將對應的陣列元素設為區域變數來獲得類似的效果:local $ar->[$ar->[0]{'key'}]
。
(F) 第一次使用 %! hash 時,perl 會自動載入 Errno.pm 模組。Errno 模組預期會繫結 %! hash 以提供 $! errno 值的符號名稱。
(F) 字串形式的 CORE::word
傳遞給 prototype(),但沒有名稱為 word
的內建函式。
(W) 在正規表示式字元類別 ([]) 中,以 "[." 開頭且以 ".]" 結尾的語法保留供未來擴充。如果需要在正規表示式字元類別中表示這些字元序列,請使用反斜線加上方括號引號:"[." 和 ".\]"。
(W) 在正規表示式字元類別 ([]) 中,以 "[:" 開頭且以 ":]" 結尾的語法保留供未來擴充。如果需要在正規表示式字元類別中表示這些字元序列,請使用反斜線加上方括號引號:"[:" 和 ":\]"。
(W) 在正規表示式字元類別 ([]) 中,以 "[=" 開頭且以 "=]" 結尾的語法保留供未來擴充。如果需要在正規表示式字元類別中表示這些字元序列,請使用反斜線加上方括號引號:"[=" 和 "=\]"。
(F) Perl 在編譯包含不安全的零寬度斷言 (?{ ... })
的正規表示式時偵測到受污染的資料。請參閱 "(?{ code })" in perlre 和 perlsec。
(F) 正規表示式包含 (?{ ... })
零寬度斷言,但只有在 use re 'eval'
pragma 生效時才允許使用該結構。請參閱 "(?{ code })" in perlre。
(F) Perl 嘗試在執行階段編譯包含 (?{ ... })
零寬度斷言的正規表示式,就像在模式包含內插值時一樣。由於這是一個安全風險,因此不允許。如果您堅持要這麼做,您仍可以在執行階段從內插字串明確建立模式,並在 eval() 中使用它。請參閱 "(?{ code })" in perlre。
(W) 您正在祝福一個零長度字串的參考。這會產生將參考祝福到套件 main 的效果。這通常不是您想要的。請考慮提供預設目標套件,例如 bless($ref, $p || 'MyPackage');
(W) 您可能嘗試在十六進位數字中使用 0 - 9 或 A - F 以外的字元。十六進位數字的解釋在非法字元之前停止。
(F) 您嘗試將陣列當作雜湊來存取,但使用的欄位名稱未定義。索引為 0 的雜湊應將所有有效的欄位名稱對應到陣列索引,才能正常運作。
(F) 您嘗試存取型別變數的欄位,但該型別不知道該欄位名稱。在編譯時,欄位名稱會在型別套件的 %FIELDS hash 中查詢。%FIELDS hash 通常會使用 'fields' pragma 設定。
(F) 您無法配置超過 2^31+"少量" 位元組。此錯誤最有可能由 Perl 程式中的錯字造成。例如,$arr[time]
而不是 $arr[$time]
。
(F) 範圍運算子 ".." 的一個(或兩個)數字引數超出內部可以用整數表示的範圍。一個可能的解決方法是強制 Perl 使用神奇字串增量,方法是在數字前面加上 "0"。
(F) 在呼叫方法時遇到超過 100 層的繼承。這可能表示您的繼承階層中出現意外的迴圈。
(W) 您提供了一個單一參考,而 Perl 預期的是一個具有偶數個元素的清單(用於指定給 hash)。這通常表示您在應該使用括號時使用了匿名 hash 建構函式。無論如何,hash 需要鍵值配對。
%hash = { one => 1, two => 2, }; # WRONG
%hash = [ qw/ an anon array / ]; # WRONG
%hash = ( one => 1, two => 2, ); # right
%hash = qw( one 1 two 2 ); # also fine
(W) 未定義值指定給型別全域變數,例如 *foo = undef
。這什麼都不做。您可能實際上是要 undef *foo
。
(D) 指示的裸字是一個保留字。perl 的未來版本可能會將其用作關鍵字,因此您最好以適合其使用情境的適當方式明確引用該字,或完全使用不同的名稱。可以透過新增 &
前綴或使用套件限定詞 (例如 &our()
或 Foo::our()
) 來抑制子常式名稱的警告。
(S) 整個警告訊息看起來類似於
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LC_ALL = "En_US",
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
失敗的區域設定實際上有所不同。在上述情況中,設定為 LC_ALL 為「En_US」,而 LANG 沒有值。此錯誤表示 Perl 偵測到您和/或您的系統管理員已設定所謂的可變系統,但 Perl 無法使用這些設定。幸運的是,這並非嚴重問題:Perl 可以且會使用稱為「C」的「預設區域設定」,腳本將會執行。然而,在您真正解決問題之前,每次執行 Perl 時都會收到相同的錯誤訊息。如何在 perllocale 中的「區域設定問題」 中找到真正解決問題的方法。
(F) 在嘗試處理 -e 開關時,mktemp() 常式因某種原因而失敗。可能是您的 /tmp 分割區已滿或遭到破壞。
已移除,因為 -e 不再使用暫存檔。
(F) 在嘗試處理 -e 開關時,寫入常式因某種原因而失敗。可能是您的 /tmp 分割區已滿或遭到破壞。
已移除,因為 -e 不再使用暫存檔。
(F) 在嘗試處理 -e 開關時,建立常式因某種原因而失敗。可能是您的 /tmp 分割區已滿或遭到破壞。
已移除,因為 -e 不再使用暫存檔。
(F) 常規表示式的目前實作使用短整數作為字串內的位址偏移量。不幸的是,這表示如果常規表示式編譯超過 32767,就會爆炸。通常,當您想要一個這麼大的常規表示式時,有更好的方法可以使用多個陳述式來完成。請參閱 perlre。
您可以使用「Configure -Uinstallusrbinperl」,這會讓 installperl 跳過將 perl 安裝為 /usr/bin/perl。如果您因為某些原因不想修改 /usr/bin,這會很有用,但也很有害,因為許多指令碼假設可以在 /usr/bin/perl 中找到 Perl。
如果您發現您認為是錯誤的地方,您可能會檢查 comp.lang.perl.misc 新聞群組中最近發布的文章標頭。在 Perl 首頁 http://www.perl.com/perl/ 中也可能有資訊。
如果您相信您有一個未報告的錯誤,請執行您版本中包含的 perlbug 程式。請務必將您的錯誤精簡為一個小但足夠的測試案例。您的錯誤報告連同 perl -V
的輸出,將會傳送至 <perlbug@perl.com>,供 Perl 移植團隊分析。
變更 檔案提供有關變更內容的詳盡詳細資料。
安裝 檔案說明如何建置 Perl。
自述 檔案提供一般資訊。
藝術 和 複製 檔案提供版權資訊。
由 Gurusamy Sarathy <gsar@activestate.com> 編寫,並得到 Perl 移植人員的許多貢獻。
將遺漏或更正事項傳送至 <perlbug@perl.com>。