簡體   English   中英

如何在macOS 10.13 High Sierra上安裝Perl

[英]How to install Perl on macOS 10.13 High Sierra

我最近升級到macOS 10.13 High Sierra,並在嘗試安裝更新版本的Perl(5.26.1)后遇到問題。 問題的關鍵在於cpan/DB_File的自檢在macOS 10.13 High Sierra(家用筆記本電腦)上始終失敗,但在macOS 10.12 Sierra(工作筆記本電腦)上取得了成功。

以下是顯示失敗的安裝日志部分:

../cpan/Config-Perl-V/t/30_plv5240.t ............................... ok
../cpan/Config-Perl-V/t/31_plv52511.t .............................. ok
../cpan/DB_File/t/db-btree.t ....................................... ok
Use of uninitialized value $value in string eq at t/db-hash.t line 224.
Use of uninitialized value $values[0] in string eq at t/db-hash.t line 224.
Use of uninitialized value $value in lc at t/db-hash.t line 224.
Use of uninitialized value $h{""} in string eq at t/db-hash.t line 243.
Use of uninitialized value in numeric eq (==) at t/db-hash.t line 252.
Use of uninitialized value in numeric eq (==) at t/db-hash.t line 252.
Use of uninitialized value in numeric eq (==) at t/db-hash.t line 252.
Use of uninitialized value in numeric eq (==) at t/db-hash.t line 252.
Use of uninitialized value in numeric eq (==) at t/db-hash.t line 252.
Use of uninitialized value in numeric eq (==) at t/db-hash.t line 252.
Use of uninitialized value in numeric eq (==) at t/db-hash.t line 252.
Use of uninitialized value in numeric eq (==) at t/db-hash.t line 252.
Use of uninitialized value $foo[18] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[36] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[48] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[58] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[59] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[60] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[62] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[63] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[92] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[114] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[140] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[187] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[188] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[189] in join or string at t/db-hash.t line 261.
Use of uninitialized value $h{"Fred"} in string eq at t/db-hash.t line 572.
Use of uninitialized value $v in concatenation (.) or string at t/db-hash.t line 748.
../cpan/DB_File/t/db-hash.t ........................................ 
Dubious, test returned 2 (wstat 512, 0x200)
Failed 76/166 subtests 

無論是使用perlbrew install perl-5.26.1還是只是下載Perl tarfile並手動安裝,我都能重復同樣的失敗。 當我嘗試調試有問題的測試t/db-hash.t ,我可以看到測試哈希%h已創建並正在測試文件中填充,但是當我print Dumper(\\%h)我看到了散列看起來具有正確的鍵,但所有值都是undef ,而不是測試腳本中分配的值。

這些undef值導致測試失敗。 奇怪的是,當我打印整個哈希或嘗試創建哈希值數組時,會顯示未定義的值。 如果我要求特定的哈希鍵的值,例如my $value = $h{key} ,則該值打印正常。

問題:

  • 如何解決這個問題,以便我可以在macOS 10.13上安裝新的Perl?
  • 什么破了? 這曾經用於macOS 10.12。

TL; DR

這是有效的:

  1. 安裝Berkeley DB。 我使用Homebrew ,但您可以在Oracle站點獲取源文件。

     brew install berkeley-db 
  2. 安裝Perl。 我使用Perlbrew ,但您可以在Perl站點獲取源文件。

     perlbrew install perl-5.26.1 

部分解釋

回顧失敗的安裝日志, DB_File部分附近有一條警告,提供了一個線索:

...
./miniperl -Ilib make_ext.pl lib/auto/DB_File/DB_File.bundle  MAKE="/Applications/Xcode.app/Contents/Developer/usr/bin/make" LIBPERL_A=libperl.a LINKTYPE=dynamic
Parsing config.in...
Looks Good.
Warning (mostly harmless): No library found for -ldb
Generating a Unix-style Makefile
Writing Makefile for DB_File
...

沒有找到db庫, 大多數都是無害的。

根據DB_File模塊的文檔,它是......

...一個允許Perl程序使用Berkeley DB提供的工具的模塊......

安裝berkeley-db ,Perl安裝日志的相同部分不再顯示相同的警告:

...
./miniperl -Ilib make_ext.pl lib/auto/DB_File/DB_File.bundle  MAKE="/Applications/Xcode.app/Contents/Developer/usr/bin/make" LIBPERL_A=libperl.a LINKTYPE=dynamic
Parsing config.in...
Looks Good.
Generating a Unix-style Makefile
Writing Makefile for DB_File
...

在此過程中,先前失敗的測試通過,允許安裝成功完成:

...
../cpan/DB_File/t/db-btree.t ....................................... ok
../cpan/DB_File/t/db-hash.t ........................................ ok
../cpan/DB_File/t/db-recno.t ....................................... ok
...

我無法在網上找到任何關於為什么Berkeley DB似乎從macOS 10.13 High Sierra中丟失的文檔,以及這是否與以前的macOS版本相比有所改變。

非常感謝Tim D幫助我排除故障。

要安裝perl本身(包含DB_File模塊),或者從CPAN安裝DB_File模塊,解決方案是相同的:編輯其config.in以指向berkeley-db的正確位置。

例如,我已經通過macports使用sudo port install db48安裝了db48軟件包。 在perl下載本身,我導航到cpan / DB_File並編輯其config.in ,從而改變現有的INCLUDE和LIB分配:

INCLUDE    = /opt/local/include/db48
LIB        = /opt/local/lib/db48

然后我可以恢復perl構建過程並且DB_File可以編譯。

參考文獻:

Perl RT#133280
CPAN RT#125238

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM