我尝试执行日期

时间:2015-12-19 18:05:53

标签: perl

我正在运行这个perl脚本(一个开源项目的一部分,不是我写的)而且它在我身上死了。以下是代码的相关部分:

$enddate = `date`;

我收到的错误:

Can't exec "date". 

perl版本有问题吗?还是外壳?

2 个答案:

答案 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命令时(无论是通过execsystemreadpipe / 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";