如果我从linux bash命令行运行Date +%H:%M:%S%N,它会打印出纳秒分辨率的时间。我试图连续打印到屏幕,但这个perl程序似乎不起作用。我做错了什么?感谢。
#!/usr/bin/perl
while(1)
{
print system("Date +%H:%M:%S.%N");
}
答案 0 :(得分:4)
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
...
答案 1 :(得分:2)
如果我从linux bash命令行运行Date +%H:%M:%S。%N,它会将时间打印到纳秒分辨率。
也许您有一个名为Date
的函数,别名或非标准命令。标准命令的名称为date
(命令名称区分大小写)。如果你有一个名为Date
的东西可以在shell提示符下运行,那么它可能无法在Perl脚本中运行。
并且您的Perl脚本打印system
函数返回的值,该函数是一个整数,包含有关命令状态的信息。
这应该有效(没有 print
)。
system("date +%H:%M:%S.%N");
这样更好,因为它直接调用date
而不通过shell:
system('date', '+%H:%M:%S.%N');
perldoc -f system
了解有关差异的更多信息。
但是这仍然有调用外部命令的开销。通过更多的工作,您可以在纯Perl中完成此操作。有几个CPAN模块可以操纵日期和时间。
即便如此,请记住,纳秒分辨率的时间戳并不是完全有意义的;你的系统时钟不是那准确,而确定时间的调用可能需要至少几纳秒。