0

我正在尝试附加本地时间的积分返回值(在 Perl 中),但我似乎无法避免将返回值转换为如下所示的内容:Sun Jul 26 16:34:49 2009 当我说 print localtime我看到了我想要的,但是当我说 $foo = localtime,""; 打印 $foo; 我得到了字符串。我想要那些数字。我试过 $foo = localtime() * 1 但它恢复到 1969 并得到了字符串。

很混乱。

4

3 回答 3

6

该字符串是localtime在标量上下文中返回的内容。它返回

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

在列表上下文中。如果您只需要时间戳,请使用time.

于 2009-07-26T23:48:40.040 回答
4

Perl 根据上下文对事物进行不同的处理。在标量上下文中,localtime返回一个表示当前(本地)时间的字符串。在列表上下文中,它返回组成时间值的各个字段的列表。

这个问题是由于print.

    * print FILEHANDLE LIST
    * print LIST
    * print

由于print需要一个列表,这会放入localtime列表上下文中,因此它返回一个表示秒、分钟、小时等的数字列表,然后由print函数连接起来。分配给标量时,localtime在标量上下文中并返回字符串。如果你想要这些数字的串联,你可以做类似的事情

my $foo = join '', localtime;
print $foo;

然而,无论你在做什么,一个合适的纪元时间值可能会更有用。在这种情况下,您可以time改用。

于 2009-07-26T23:51:57.630 回答
1

每当您认为您知道函数的作用,但它没有这样做时,请查看文档。我经常查看本地时间文档,因为我永远记不起这些值的出现顺序。

于 2009-07-27T04:06:13.917 回答