2009-07-26 50 views
0

我试图追加本地时间(在Perl中)的积分返回值,但我似乎无法避免它将返回值val转换为如下所示的内容:Sun Jul 26 16:34:49 2009 When I说打印localtime我看到我想要的,但是当我说 $ foo = localtime,“”;打印$ foo;我得到了字符串。 我想要那些数字。我试过$ foo = localtime()* 1,但是回到1969并得到字符串。如何在打印时将localtime()保留为int?

非常混乱。

+1

`print localtime`不会返回您认为它的作用;这是所有数字一起运行的清单。 – ysth 2009-07-26 23:50:54

回答

6

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

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

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

+1

完全按照我的要求工作。非常感谢。 – 2009-07-26 23:53:56

4

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

出现此问题是因为print的语法。

* print FILEHANDLE LIST 
    * print LIST 
    * print 

由于print期望列表,这使localtime在列表环境,所以它返回的表示秒,分钟,小时数字的列表,等等,然后将其通过print功能级联。分配给标量时,localtime处于标量上下文中,并返回字符串。如果你想要的这些数字拼接,你可以这样做

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

然而,也许是合适的时期时间值将是无论你做什么更有用。在这种情况下,您可以使用time

+1

是的,我误解了这些数字是什么。我认为这是一个毫秒级的邮票。我意识到现在完全不是我想要的,而'时间'正是我所需要的。 – 2009-07-27 02:22:55

1

每当你认为自己知道一个函数的作用,但它没有这样做,请检查文档。我经常检查localtime文档,因为我永远不会记住值的出现顺序。