0

(Perl で) localtime の整数の戻り値を追加しようとしていますが、戻り値を次のようなものに変換することは避けられないようです: Sun Jul 26 16:34:49 2009必要なものはわかりますが、$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 に答える