2010-06-13 101 views
12

我們有一個服務器場,我們正在慢慢遷移到新版本的Perl(5.12.1)。我們目前正在運行5.8.5。操作系統也將從RedHat 4升級到RedHat 5,但RedHat 5仍然支持Perl 5.8.8。因此,在我們的源代碼樹中,我們將支持Perl的兩個版本。不同版本的Perl需要不同的CPAN模塊安裝嗎?

我被告知要將新版本的Perl安裝到我們的源代碼樹中,以及我們當前使用的所有CPAN模塊中。我實際上被告知用正確版本的Perl「編譯」模塊。我很困惑。對於不同版本的Perl,是否有一些模塊實際上配置不同?鑑於此,我假設我應該在我們的樹中爲每個版本的Perl配置一個CPAN目錄?

有關這種情況的任何信息或「陷阱」?

編輯:作爲一個額外的問題,同一個cpan目錄(由〜/ .cpan指向)是否爲這兩棵樹服務,或者當我在不同的樹中工作時(安裝模塊),我應該鏈接到不同的目錄中?

回答

9

任何使用XS(編譯的C代碼,動態加載的)的perl模塊通常只能使用與它們一起編譯的相同版本的perl。這是由於兩個原因:

原因之一是默認情況下它們被安裝到包含perl版本號的目錄中,而任何其他版本的perl都不會查看該目錄。

原因二是因爲perl API可能會在主要版本之間發生變化,所以即使您要將庫複製到相應的目錄,它們可能會也可能不會運行,具體取決於它們使用的功能以及兩個版本的perl是。在5.8和5.12之間存在顯着的差異,可能會打破幾乎所有的代碼。

儘管如此,這完全不適用於純Perl模塊;除了極少數例外,它們可以自由複製。這只是XS代碼問題。

5

一些perl模塊編譯並鏈接到系統庫。如果你升級你的操作系統,那麼這些庫就不再存在了,這會導致這些模塊不正常或者根本不運行。因此,建議重新編譯你的perl模塊。

如果您在新系統上重新安裝新版本的perl,那麼您應該不會遇到任何問題,因爲在安裝過程中將使用正確的標題和庫。

4

它不會是Perl的版本,而是底層平臺的問題。 Redhat4和Redhat5比Perl 5.8.5和5.8.8更加不同。事實上,如果你發現這些版本有所不同,這可能是一個錯誤。

RH4和RH5具有不同的庫集,並且必須針對這些庫重新編譯perl本機擴展。如果您將這些編譯的樹保存在源代碼庫中,那麼您確實需要2棵樹。如果你想避免這種情況,你可以'靜態編譯',但這會變得非常混亂,可能會嚴重影響腳本的內存佔用空間和相關加載時間,不建議(在很多情況下甚至不可能)。

一個更清潔的解決方案將是一個安裝腳本,它從CPAN下載/編譯/安裝副本並保持源代碼樹免於這些工件。您仍然可以決定在目標計算機上進行安裝的一部分,還是在目標計算機上安裝之前構建二進制包的一部分。

-1

請找到下面提供的URL,以瞭解如何爲不同的CPAN安裝模塊。

http://perllinux.blogspot.in/2014/08/multiple-perl-cpan-on-single-machine.html

而且,是的,需要的Perl的不同verisons要對所有的人安裝的模塊。

+0

請引用或總結文章,而不是簡單地提供一個鏈接。這樣,即使來源消失,您的答案仍然有幫助。 – Brian 2014-08-26 17:30:33

+0

@Gautam Prashant:總結文章:) :) – 2015-03-17 20:43:40