1

我想从 perl one 班轮打印昨天的日期,当我在命令提示符下运行它时,我收到以下错误。

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

4

2 回答 2

9

不幸的是,在 Windows 命令行中,您必须使用双引号:

perl -e "..."

如果您正在运行的命令需要在内部引用,请使用''or qq{}

perl -e "print qq{Hello Windows\n}"
于 2013-04-01T15:01:16.023 回答
1

两个问题:

  1. 单引号 ( ') 对 Windows 命令 shell 没有意义。使用双引号 ( ") 引用参数。

    如果您想要双引号字符串文字(例如"\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 命令 shell 不支持在其参数中使用换行符。

于 2013-04-01T20:35:36.000 回答