我正在运行这个perl脚本(一个开源项目的一部分,不是我写的)而且它在我身上死了。以下是代码的相关部分:
$enddate = `date`;
我收到的错误:
Can't exec "date".
perl版本有问题吗?还是外壳?
答案 0 :(得分:3)
如果您只想要当前的日期/时间,那么无论如何都不需要使用日期命令。
use POSIX qw(strftime);
my $date_time = strftime('%F %T', localtime());
print "$date_time\n";
POSIX是一个核心模块,所以如果你有Perl你应该有POSIX。有关日期格式字符串的详细信息,请参见strftime手册页。
您还没有给我们足够的信息来诊断在反引号中运行日期的问题。如果我试图诊断它,我可能会使用像strace
这样的工具,但可能不适用于您的平台。
答案 1 :(得分:3)
当要求Perl执行shell命令时(无论是通过exec
,system
,readpipe
/ qx
/反引号还是open
), shell命令不包含除空白字符以外的shell元字符,Perl将执行命令本身而不是调用shell。
如果Perl无法执行程序并且启用了警告,则Perl会发出一条警告,说明程序无法执行,以及原因。
$ perl -we'`non-existent`'
Can't exec "non-existent": No such file or directory at -e line 1.
您似乎错误地收到了收到的消息。您停止的部分是date
无法执行的原因。例如,“没有这样的文件或目录”表示在您的路径中找不到该程序。
无论如何,确实没有必要执行date
。以下是等效的:
use POSIX qw( strftime );
my $enddate = strftime('%a %b %e %H:%M:%S %Z %Y', localtime()) . "\n";