2015-12-19 41 views
-2

我正在運行此perl腳本(開放源代碼項目的一部分,不是由我寫的),它死在我身上。下面是代碼的相關部分:當我嘗試執行日期時出錯

$enddate = `date`; 

我收到的錯誤:

Can't exec "date". 

是否與Perl版本的問題嗎?或殼?

+2

您正在使用哪種環境?系統?你真的需要執行一個外部命令來獲取日期嗎? – sidyll

+0

「不能執行」日期「''後,你不會收到錯誤消息嗎?是什麼版本的Perl?你的PATH,SHELL和其他相關的環境變量是什麼?你可以使用相同的環境從shell運行'date'嗎? – jcaron

+0

'$ ENV {'PATH'}'會告訴你它在哪裏尋找'date'命令。 –

回答

3

如果你只是想要當前的日期/時間,那麼你不需要掏出日期命令。

use POSIX qw(strftime); 

my $date_time = strftime('%F %T', localtime()); 
print "$date_time\n"; 

POSIX是一個核心模塊,所以如果你有Perl,你應該有POSIX。有關日期格式字符串的詳細信息,請參閱strftime手冊頁。

您還沒有真正給我們足夠的信息來診斷反向運行日期問題。如果我試圖診斷它,我可能會使用像strace這樣的工具,但可能無法用於您的平臺。

+2

或者,'Time :: Piece'既核心又好。 – Sobrique

3

當Perl的被要求執行一個外殼命令(無論是通過execsystemreadpipe/qx /反引號或open),以及外殼命令包含除空白字符其他無殼元字符,Perl將執行該命令本身,而不是調用一個shell。

如果Perl無法執行程序並啓用警告,Perl會發出警告說程序無法執行,以及原因。

$ perl -we'`non-existent`' 
Can't exec "non-existent": No such file or directory at -e line 1. 

您似乎誤述了您收到的消息。您遺漏的部分是date無法執行的原因。例如,「沒有這樣的文件或目錄」就表示程序在您的路徑中找不到。


無論如何,真的不需要執行date。以下是等效的:

use POSIX qw(strftime); 

my $enddate = strftime('%a %b %e %H:%M:%S %Z %Y', localtime()) . "\n"; 
相關問題