2009-02-26 32 views
5

除了當前位於/ usr/local目錄中的古老Perl之外,我想在我的主目錄中設置Perl 5.10。我不是這臺機器上的超級用戶。我可以在我的主目錄中安裝預配置的Perl二進制包嗎?

我發現需要5.10 HPUX perl二進制包,它似乎工作,但出於某種原因,它似乎認爲它運行在/ usr/local(由@INC錯誤消息證明)。除了PERLLIB之外,還有其他一些變量,比如PERLHOME或者我需要設置的東西,以便Perl不會在/ usr/local目錄中查找任何東西?

P.S.我看到advice online在./Configure步驟中編譯和設置目錄,但我一直在這個舊盒子上編譯的東西很難,所以我更喜歡使用預編譯的Perl,因爲它似乎主要工作。


更新 - 萊昂回答了這個,所以基本上這是不可能的,除非它是在頭腦與編譯從你的主目錄正常運行perl二進制

回答

4

這取決於你perl二進制文件是否是重定位。這是一個編譯時間選項。這個命令的輸出是什麼?它是否定義?

perl -V:userelocatableinc 
+0

perl -V:userelocatableinc userelocatableinc ='undef'; – 2009-02-26 00:30:50

+0

然後你運氣不好。你必須自己編譯它。 – 2009-02-26 00:31:46

+0

這是否意味着它不會工作?所以你的回答基本上是沒有辦法把這個二進制文件放在我的家庭目錄中,因爲當有人編譯它時,這個變量沒有被設置。假設他們有,那麼它將如何工作? – 2009-02-26 00:32:39

-1

您可以指向您在第一線需要的任何解釋道:

!#/my/local/perl 

如果你不跨機器找便攜性,你可以在腳本中手動設置@INC。我認爲還有一種方法可以從env中獲得它,這可能更具可移植性。

4

你不會喜歡這個答案。

Perl在其二進制文件中存儲@INC作爲字符串。在userelocatableinc之前,重新定位Perl的技術是在二進制文件上進行搜索和替換,以及在Config.pm中更改它們。這就是ActiveState提供可重定位Perl的方式。

字符串必須保持與以前相同的大小,用空字節填充任何額外空間。 ActiveState可以通過配置一個像「/ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxTMPPATHxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx」之類的前綴來解決這個問題。它也使得在二進制文件中找到真正的明確。你沒有這樣的運氣,所以只有當前路徑比你想要替換的路徑更短時纔有效。

但這太複雜了。只需使用HP/UX的源代碼爲自己編譯Perl,或者只需從perl.org獲取常規源代碼即可。 Perl擁有專門的HP/UX開發人員,因此應該可以順利進行。

相關問題