假設我有一個叫foo
和文字看起來象下面這樣:如何知道哪個Perl解釋器被用於執行當前Perl程序
#!/bin/perl
eval 'exec perl5 -S $0 ${1+"[email protected]"}'
if 0;
根據我的理解,如果我跑perl foo
或foo
,系統perl將用於執行我的腳本(即在shebang行中指定的/usr/bin/perl
)。但是,如果我運行我的腳本./foo
,那麼正在使用的perl解釋是eval
語句中的perl5
。
我想驗證我的理論,我需要找到一種方法來找出哪個perl解釋器被調用來執行我的腳本。
有無論如何這樣做嗎?
非常感謝!
編輯1:我想我釘了這個代碼塊,我寫了一個blog post就可以了。如果你仍然對上面的代碼塊感到困惑,請檢查一下。
不,shebang特別明確地運行'/ bin/perl','exec'只在腳本運行時通過shell運行(所以'sh script.pl'或類似的)。這種「exec」黑客是一些古老的原始系統的擱置,不支持shebang規範。 – tripleee
@tripleee感謝下面的答案,我可以試驗一下,你是正確的。謝謝! – zack
'$]'會給你這個版本,但'$^X'會命名解釋器 – ikegami