如果我从 linux bash 命令行运行 Date +%H:%M:%S.%N 它会打印出纳秒分辨率的时间。我正在尝试将其连续打印到屏幕上,但这个 perl 程序似乎不起作用。我做错了什么?谢谢。
#!/usr/bin/perl
while(1)
{
print system("Date +%H:%M:%S.%N");
}
c:\Code>perl -MDateTime::HiRes -E "while (1) {say DateTime::HiRes->now()->strftime('%F %T.%N');}"
2013-05-23 18:53:32.220020000
2013-05-23 18:53:32.220460000
2013-05-23 18:53:32.220800000
2013-05-23 18:53:32.221080000
2013-05-23 18:53:32.221350000
2013-05-23 18:53:32.221640000
2013-05-23 18:53:32.221950000
2013-05-23 18:53:32.222260000
2013-05-23 18:53:32.222570000
2013-05-23 18:53:32.222880000
2013-05-23 18:53:32.223190000
2013-05-23 18:53:32.223490000
2013-05-23 18:53:32.223810000
2013-05-23 18:53:32.224120000
2013-05-23 18:53:32.224430000
2013-05-23 18:53:32.224750000
2013-05-23 18:53:32.225070000
2013-05-23 18:53:32.225390000
2013-05-23 18:53:32.225710000
2013-05-23 18:53:32.226030000
...
如果我从 linux bash 命令行运行 Date +%H:%M:%S.%N 它会打印出纳秒分辨率的时间。
也许您有一个名为Date
. 标准命令的名称是date
(命令名称区分大小写)。如果你有一些Date
可以在你的 shell 提示符下工作的东西,它可能不会在 Perl 脚本中工作。
您的 Perl 脚本会打印函数返回的值system
,该值是一个包含命令状态信息的整数。
这应该工作(没有print
)。
system("date +%H:%M:%S.%N");
这更好,因为它date
直接调用而不通过外壳:
system('date', '+%H:%M:%S.%N');
perldoc -f system
有关差异的更多信息。
但这仍然有调用外部命令的开销。再多做一些工作,您就可以在纯 Perl 中做到这一点。有几个 CPAN 模块可以处理日期和时间。
即便如此,请记住,纳秒分辨率时间戳并不完全有意义。您系统的时钟不是那么准确,确定时间的调用可能至少需要几纳秒。