2013-04-01 19 views
1

我想從一個perl班輪打印昨天的日期,當我在命令提示符下運行時,我得到下面錯誤。爲什麼我得到當我在Windows上運行Perl一個班輪時找不到字符串終結符「'」錯誤

perl -e 'use POSIX qw(strftime); 
     $now_string = strftime "%Y%m%d", localtime(time()-86400); 
     print $now_string'; 

錯誤:

Can't find string terminator "'" anywhere before EOF at -e line 1. 

我的perl版本v5.14.2

+0

尾隨分號是不必要的。 –

+0

從來沒有見過與3線的單線。 :-) –

+0

@Francisco Zarabozo,編輯添加了可讀性的換行符。 – ikegami

回答

1

兩個問題:

  1. 單引號(')是沒有意義的Windows命令外殼。參數用雙引號(")引用。

    如果您希望雙引號字符串文本(例如"\n")在參數內需要雙引號,則可以使用qq{...}代替(qq{\n})。

  2. 您的代碼並不總是返回昨天的日期。因爲有些日子超過86400秒,你可以得到昨天前一天的日期。因爲有些日子少於86400秒,你可以得到今天的日期。你想:

    perl -MDateTime -E"say 
        DateTime->now(time_zone=>'local')->set_time_zone('floating') 
        ->subtract(days=>1)->strftime('%Y%m%d')" 
    

    你必須把它所有在同一行,但因爲Windows命令外殼不支持換行符在它的參數。

+0

謝謝..我需要安裝日期時間模塊,我會嘗試它。 – Chandru

+0

我其實很喜歡''\ n「'作爲'qq'的快捷鍵\ n」'。和'''和'q''一樣。 –

9

不幸的是,在Windows命令行中,你必須使用雙引號:

perl -e "..." 

如果您正在運行的命令需要在內部引用,請使用''qq{}

perl -e "print qq{Hello Windows\n}" 
相關問題