2014-07-19 20 views
2
My development environment is windows and hosting environment is Linux. At the time of development i have the header: 

"#!c:/perl64/bin/perl.exe" 

而Web服務器上託管組合中的perl頭,我需要在所有的Perl文件改變頭:如何讓Windows和Linux

"#!/usr/bin/perl" 

這個過程很容易出錯,如果我錯過了一些東西。有可能在Perl文件中結合兩個頭文件並依賴於操作系統,它會選擇正確的文件嗎?

+0

據我所知'#!'是一個純UNIX的東西,例如windows只會查看文件擴展名,並不會看着'#!'來知道如何執行文件。 –

+0

@SteffenUllrich這是正確的,你不需要在Windows上的shebang線。 – chilemagic

+0

@Matt如果我刪除了'#!c:/ perl64/bin/perl.exe',那麼無法執行腳本。 –

回答

4

簡短回答:您不應該在Windows上使用ActivePerl需要shebang。

看起來您使用的是ActiveState Perl(默認情況下,C:\perl64,Strawberry使用C:\strawberry)。儘管他們歷來是UNIX-y的東西,但ActiveState在Perl文件中解析shebang行,但只是爲了獲得解釋器標誌(例如-T用於檢查異常),但是您沒有使用任何解釋器標誌,所以您不需要使用shebang視窗。

如果你的腳本「在Windows上沒有執行」(具體的錯誤在這裏會有幫助)沒有shebang,那麼其他的東西就是錯的。確保您的腳本具有.pl擴展名,並確保您的ActivePerl安裝已設置爲.pl文件的默認值。下面是安裝說明:

http://docs.activestate.com/activeperl/5.18/install.html

此外,根據上面的文檔:

在Windows 2000/XP/2003/Vista系統上的ActivePerl安裝必須由特權用戶只能執行。如果你安裝的ActivePerl不完整的管理員權限,會出現下列問題:... PerlScript不會創建文件關聯

在Linux方面,你也當運行腳本的可執行文件中./my-script.pl只需要家當而不是像在perl my-script.pl中那樣手動指定解釋器(或者,如果您需要解釋器標誌,則再次指定解釋器)。在基於Linux/UNIX的系統上,shebang的規範建議是#!/usr/bin/env perl,以避免需要硬編碼路徑給解釋器。