【发布时间】:2014-07-07 21:10:52
【问题描述】:
我对 Perl 还很陌生,所以如果问题很琐碎,请原谅我。
在工作中,我有一项任务是创建一个脚本,该脚本会在其他开发人员错过任务的截止日期时发送电子邮件。由于整个事情必须在 Windows 上运行,使用 Strawberry Perl,我使用 Windows 命令date /T 来执行日期检查。我使用反引号运算符调用了很多外部命令,但在这种特殊情况下,反引号不起作用:
my $date = `date /T`;
输出:
date: invalid date `/T'
使用一些额外的引号修复:
my $date = `"date /T"`
输出:
Mon 07/07/2014
我的问题是:为什么会这样?
如果其他带有反引号的外部调用也能正常工作,我会明白这一点,但这是我唯一必须这样调用才能使其工作的方法。
【问题讨论】:
-
不带引号对我有用。
-
排除引号时会发生什么(除了“不工作”)?
-
你在使用 Cygwin 吗?在命令提示符下,
date /T有效。在 Cygwin 下,date /T给出date: invalid date `/T'。 -
听起来好像在不带引号的情况下调用它时,它会根据cygwin的路径指向cygwin的
date可执行文件。当你用引号调用它时,它使用的是 Window 的 date 可执行文件,基于你的 Windows 路径。进入 Cygwin 并输入which date或type date,你会发现你没有使用 Windows 日期。 -
为什么不使用纯 Perl 方法来获取日期?例如
use Time::Piece; my $t = localtime; print $t->strftime('%a %d/%m/%Y');这使您不必 1) 检查外部命令中的错误,2) 担心不同平台上外部命令之间的差异,以及 3) 担心烦人的引用问题。
标签: perl strawberry-perl