0

我正在编写一个 Perl 程序来获取特定文件的修改时间。我尝试了以下场景:

  1. $time = system("stat -c %y temp.txt")--> 这会将 $time 设置为“0”并将“2013-04-03 06:10:02.000000000 -0600”写入标准输出。

  2. $time = `stat -c %y temp.txt`--> 这会将 $time 设置为“2013-04-03 06:10:02.000000000 -0600”,并在标准输出上显示相同的内容(“2013-04-03 06:10:02.000000000 -0600”)。

  3. $time = exec("stat -c %y temp.txt")--> 这不会设置 $time,但会在标准输出上打印“2013-04-03 06:10:02.000000000 -0600”。

由于这一次又一次地用相同类型的数据淹没我的标准输出,我想摆脱它。有人可以帮我吗?

4

2 回答 2

0

反引号(以及相关的qx运算符或readpipe函数)不会在标准输出上写入任何输出;他们执行命令,捕获命令的输出并将其返回(通常将其分配给某个变量)。所以

$time = `stat -c %y temp.txt`

将设置$time而不向标准输出写入任何内容。该命令有可能将某些内容写入标准错误,但从您描述的症状来看,这看起来并不是正在发生的事情。

于 2013-04-04T19:31:12.057 回答
0

你最好使用 perl 的内置stat函数:

@st = stat('temp.txt');

$st[9]现在包含上次修改时间的 Unix 纪元时间戳。你可以把它变成像这样更有用的格式

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($st[9]);

或者只是得到一个像这样的可打印字符串

$time = localtime($st[9]);
于 2013-04-03T13:48:23.040 回答