2009-07-26 15 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文檔,因爲我永遠不會記住值的出現順序。