-1

如果我从 linux bash 命令行运行 Date +%H:%M:%S.%N 它会打印出纳秒分辨率的时间。我正在尝试将其连续打印到屏幕上,但这个 perl 程序似乎不起作用。我做错了什么?谢谢。

#!/usr/bin/perl


while(1)

{
        print system("Date +%H:%M:%S.%N");
}
4

2 回答 2

4

日期时间::HiRes?

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

...

于 2013-05-23T18:52:15.160 回答
2

如果我从 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 模块可以处理日期和时间。

即便如此,请记住,纳秒分辨率时间戳并不完全有意义。您系统的时钟不是那么准确,确定时间的调用可能至少需要几纳秒。

于 2013-05-23T17:57:00.557 回答