2009-07-26 1 views
0

localtime(Perl)の整数戻り値を追加しようとしていますが、戻り値を次のように変換するのを避けることはできません。Sun Jul 26 16:34:49 2009 print print timetime私が欲しいものを見ていますが、私が言うとき $ foo = localtime、 ""; $ fooを出力します。私は文字列を取得します。 私はそれらの数字が欲しいです。私は$ foo = localtime()* 1を試しましたが、それは1969年に戻って文字列を取得します。印刷時にlocaltime()をintとして保持するにはどうすればよいですか?

非常に混乱します。

+1

'print localtime'は、あなたが思っていると思われるものを返しません。それはすべて一緒に走っている数字のリストです。 – ysth

答えて

6

この文字列は、スカラーコンテキストで返すものです。localtimeです。リストコンテキストでは

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

を返します。タイムスタンプのみを使用する場合は、timeを使用してください。

+1

は私が望むのとまったく同じです。どうもありがとう。 –

4

Perlはコンテキストに応じて状況を異なる方法で処理します。スカラーコンテキストでは、localtimeは現在の(ローカル)時刻を表す文字列を返します。リストコンテキストでは、時間値を構成するさまざまなフィールドのリストを返します。

この問題は、printの構文のために発生します。

* print FILEHANDLE LIST 
    * print LIST 
    * print 

printリストを想定しているので、これはリストコンテキストでlocaltimeを置き、それは次に、print関数によって連結されているように秒数を表す数字、分、時間、及び、のリストを返します。スカラーに代入する場合、localtimeはスカラーコンテキストであり、その文字列を返します。あなたがそれらの数字の連結をしたい場合は、

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

ような何かを行うことができますが、おそらく適切なエポック時間の値は、あなたがやっている何のために、より有用であろう。その場合は代わりにtimeを使用できます。

+1

ええ、私はその数字が何だったのか誤解しました。私はミリ秒スタンプだと思った。私は今、それが完全に私が望んでいたものではないが、「時間」はまさに私が必要とするものであると理解しています。 –

1

あなたは関数が何をしているのか分かっているが、それをしていないと思うときはいつでも、ドキュメントをチェックしてください。 localtimeのドキュメントを頻繁にチェックしています。なぜなら、値がどのような順序で出現するかを決して覚えていないからです。

関連する問題