为什么我会得到Can';“找不到字符串终止符”'&引用;在Windows上运行Perl one liner时出错

为什么我会得到Can';“找不到字符串终止符”'&引用;在Windows上运行Perl one liner时出错,windows,perl,Windows,Perl,我想从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. 我的pe

我想从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

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

perl -e "..."
如果您正在运行的命令需要在内部引用,请使用
'
qq{}

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

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

perl -e "..."
如果您正在运行的命令需要在内部引用,请使用
'
qq{}

perl -e "print qq{Hello Windows\n}"
两个问题:

  • 单引号(
    )对于Windows命令shell来说没有意义。参数使用双引号(
    )引用

    如果需要双引号字符串文字(例如,
    “\n”
    )在参数中需要双引号,则可以使用
    qq{…}
    qq{\n}

  • 您的代码并不总是返回昨天的日期。因为某些天的时间超过86400秒,您可以获取昨天之前一天的日期。因为某些天的时间少于86400秒,您可以获取今天的日期。您想要:

    perl -MDateTime -E"say
       DateTime->now(time_zone=>'local')->set_time_zone('floating')
       ->subtract(days=>1)->strftime('%Y%m%d')"
    
    不过,您必须将其全部放在一行中,因为Windows命令shell在其参数中不支持换行符

  • 两个问题:

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

    如果需要双引号字符串文字(例如,
    “\n”
    )在参数中需要双引号,则可以使用
    qq{…}
    qq{\n}

  • 您的代码并不总是返回昨天的日期。因为有些日子的时间超过86400秒,所以可以在昨天之前得到当天的日期。因为有些日子不到86400秒,你可以得到今天的日期。你想要:

    perl -MDateTime -E"say
       DateTime->now(time_zone=>'local')->set_time_zone('floating')
       ->subtract(days=>1)->strftime('%Y%m%d')"
    
    不过,您必须将其全部放在一行中,因为Windows命令shell在其参数中不支持换行符


  • 尾随分号是不必要的。从未见过包含3行的一行代码。:-)@编辑Francisco Zarabozo为了可读性增加了换行符。后面的分号是不必要的。从未见过一行有3行的代码。:-)@编辑Francisco Zarabozo为了可读性增加了换行符。谢谢。。我需要安装datetime模块,我会试试。实际上我喜欢把
    “\n”
    看作
    qq”\n“
    的快捷方式。与
    '
    q'
    相同。谢谢。。我需要安装datetime模块,我会试试。实际上我喜欢把
    “\n”
    看作
    qq”\n“
    的快捷方式。与
    '
    q'
    相同。