为什么Perl中的backticks操作符在没有引号的情况下不能在Windows上工作?
我对Perl非常陌生,所以如果这个问题很琐碎,请原谅我 在工作中,我接到了一项任务,要创建一个脚本,当其他开发人员错过任务的截止日期时,该脚本将发送电子邮件。由于整个工作都必须在Windows上进行,所以我使用了Windows命令为什么Perl中的backticks操作符在没有引号的情况下不能在Windows上工作?,perl,strawberry-perl,Perl,Strawberry Perl,我对Perl非常陌生,所以如果这个问题很琐碎,请原谅我 在工作中,我接到了一项任务,要创建一个脚本,当其他开发人员错过任务的截止日期时,该脚本将发送电子邮件。由于整个工作都必须在Windows上进行,所以我使用了Windows命令date/T来执行日期检查。我使用backticks操作符调用了很多外部命令,但在这种特殊情况下,backticks不起作用: my $date = `date /T`; 产出: date: invalid date `/T' Mon 07/07/2014 使用一
date/T
来执行日期检查。我使用backticks操作符调用了很多外部命令,但在这种特殊情况下,backticks不起作用:
my $date = `date /T`;
产出:
date: invalid date `/T'
Mon 07/07/2014
使用一些附加引号修复了此问题:
my $date = `"date /T"`
产出:
date: invalid date `/T'
Mon 07/07/2014
我的问题是:为什么会这样
如果其他带有反勾号的外部调用也能起到同样的作用,我会得到这样的结果,但这是我唯一必须以这种方式调用的调用,才能使其起作用。您似乎无意中使用了Cygwin/GnuTools版本的
date
在Windows命令提示符下,date/T
给出当前时间。这不是一个可执行文件,这是一个命令 但是,在Cygwin/GnuTools环境下运行
date/T
会给出date:invalid date'/T'
这是因为环境1)无法看到Windows
date
命令,而2)在其PATH
环境变量中找到一个date
可执行文件,并运行它。它在没有引号的情况下对我有效。如果排除引号(除了“不工作”)会发生什么你在用Cygwin吗?在命令提示下,date/T
起作用。在Cygwin下,date/T
给出了date:invalid date`/T'
。这听起来像是在没有引号的情况下调用它,它指向Cygwin基于Cygwin路径的date
可执行文件。当您使用引号调用它时,它将根据您的Windows路径使用Windows的日期可执行文件。进入Cygwin并键入哪个日期
或键入日期
,您将看到您没有使用Windows日期。为什么不使用纯Perl方法获取日期?e、 g.使用时间::件;my$t=本地时间;打印$t->strftime(“%a%d/%m/%Y”)代码>这使您无需1)检查外部命令中的错误,2)担心不同平台上的外部命令之间的差异,以及3)担心恼人的引用问题。