2011-10-04 36 views
2

我嘗試的第一個perl程序,這樣的:perl中localtime`time`的用法是什麼?

print "My First Perl Program!\n"; 
$name ="Anto Aravinth"; 
print "Hello $name your age now is "; 
$byear = 1991; 
my($se,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime time; 
$age=($year+1900)-$byear; 
print $age; 

它產生輸出:

My First Perl Program! 
Hello Anto Aravinth your age now is 20 

予理解的邏輯,但是具有一些疑問。在這一行my($se,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime time;我知道它將當前的時區值返回到9個不同的變量。現在我想知道是什麼time是在這一行,因爲沒有time也是我得到的輸出。那麼是否需要插入time

而我想直接得到year而不輸入所有這些9名稱,有沒有辦法做到這一點?

+1

(刪除你的第一個問題,這是不是這麼一個好問題) – Mat

+0

@Mat:噢,對不起,並感謝爲好。 –

+0

那麼爲什麼downvote? –

回答

7

time返回當前時間中,由於該系統的時期,以秒計。 (通常:1970-01-01 00:00 UTC,但看到documentation的例外)。

localtime需要以該格式表示的時間,並返回與(在當前時區中)對應的日期的人類可理解部分。

如果你不給的參數localtime

「本地時間()」 使用(如時間(3)返回)當前時間。

所以你可以在你的情況下從該表達式中省略time。雖然我更喜歡更明確反正

my $se = (localtime)[5]; 

如果你只關心這一年,你能做到這一點

my $se = (localtime(time()))[5]; 
+2

1970年,1977年。朋友之間有221萬秒的時間? – mob

+0

@daxim:perl中的'time'不一定會從「標準」unix時期開始返回秒。見上面鏈接的perlfunc。 – Mat

2

Perl的手冊頁指出:「如果省略EXPR,‘本地時間()’使用。(如時間(3)返回)當前時間」,這樣你就不會需要顯式調用時間函數。

關於第二個問題,你可以簡單地做

print 1900 + (localtime)[5] 

直接訪問年信息。

+0

我想'7'不應該來這裏,'5'是Mat回答的正確方法。是不是? –

7

尋找答案,這樣的問題的第一個地方這是Perl文檔。 documentation for localtime包含你的第一個問題的答案。

如果省略EXPR,則localtime()使用當前時間(由 時間(3)返回)。

別人給予一個辦法讓剛剛從本地時間一年(使用列表切片),但是文檔中提到的Time::localtime模塊,提供了不同的方法。

#!/usr/bin/perl 

use strict; 
use warnings; 
use 5.010; 

use Time::localtime; 

say 'The year is ', localtime->year + 1900; 
+0

這聽起來不錯:) –

相關問題