2016-07-18 63 views
-1

假設我有一個叫foo和文字看起來象下面這樣:如何知道哪個Perl解釋器被用於執行當前Perl程序

#!/bin/perl 
eval 'exec perl5 -S $0 ${1+"[email protected]"}' 
    if 0; 

根據我的理解,如果我跑perl foofoo,系統perl將用於執行我的腳本(即在shebang行中指定的/usr/bin/perl)。但是,如果我運行我的腳本./foo,那麼正在使用的perl解釋是eval語句中的perl5

我想驗證我的理論,我需要找到一種方法來找出哪個perl解釋器被調用來執行我的腳本。

有無論如何這樣做嗎?

非常感謝!

編輯1:我想我釘了這個代碼塊,我寫了一個blog post就可以了。如果你仍然對上面的代碼塊感到困惑,請檢查一下。

+3

不,shebang特別明確地運行'/ bin/perl','exec'只在腳本運行時通過shell運行(所以'sh script.pl'或類似的)。這種「exec」黑客是一些古老的原始系統的擱置,不支持shebang規範。 – tripleee

+0

@tripleee感謝下面的答案,我可以試驗一下,你是正確的。謝謝! – zack

+0

'$]'會給你這個版本,但'$^X'會命名解釋器 – ikegami

回答

-1

是的,你可以找到當前腳本執行的perl解釋器的版本,使用perl特別的veriable。 $^V

+0

呃,這是版本,而不是路徑(在'$^X'中)。 – tripleee

相關問題