为什么我得到在Windows上运行Perl one liner时无法找到字符串终止符“'”错误

时间:2013-04-01 14:59:17

标签: windows perl

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

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

2 个答案:

答案 0 :(得分:9)

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

perl -e "..."

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

perl -e "print qq{Hello Windows\n}"

答案 1 :(得分:1)

两个问题:

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

    如果您想要双引号字符串文字(例如"\n")在参数中需要双引号,则可以使用qq{...}代替(qq{\n})。

    < / LI>
  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不支持其参数中的换行符。