2011-11-18 42 views
0

我可以在我的第一行不是#!/path/的地方寫一個Perl程序嗎?我可以在Unix Perl腳本中沒有shebang行嗎?

謝謝。

+0

Unix或Windows(或??)。 Windows並不關心第一行是什麼,儘管perl仍然會遵守#!的選項。線。 – runrig

+0

對不起,我應該提到它,Unix :) – infinitloop

+0

爲什麼你會想這麼做?什麼是shebang的問題? –

回答

4

是的,從perldoc perlrun(下-S開關):

#!/bin/sh 
eval 'exec /usr/bin/perl -wS $0 ${1+"[email protected]"}' 
    if $running_under_some_shell; 

請參閱完整的故事文檔。

+0

不錯!謝謝,這是什麼$ {1 +「$ @」}爲?是否有一些錯誤評估? – infinitloop

+1

在Bourne shell的現代實現中,它等價於'「$ @」'。較早的'sh'實現需要使用更復雜的表達式。 – ErikR

+0

如果定義了$ 1,則將參數展開爲「$ @」,該參數是所有參數的列表,每個參數都有引用。如果沒有定義$ 1,則不會展開任何內容。在舊shell實現中是必需的,因爲只有「$ @」(帶引號)會擴展爲空字符串的單個參數。見http://www.in-ulm.de/~mascheck/various/bourne_args/ – runrig

8

僅當您想在shell提示符下直接調用腳本時,shebang(#!)纔是必需的。 ./yourscript。你總是可以做perl yourscript並跳過shebang。

0

如果你這樣做,那麼你需要明確調用Perl。如果該行在那裏,那麼系統知道它是一個Perl腳本,所以當你使腳本可執行時,你可以直接編寫腳本./script

6

如果你關心的是硬編碼一個常量路徑(例如#!/ usr !/ bin中/ perl的,而不是#在/ usr/local/bin中/ perl的),然後使用:

#!/usr/bin/env perl 

這使Perl解釋器在您的PATH尋求,使你的腳本更有點便攜式(的Windows在旁邊)。

相關問題