23

次のステートメントを使用して、現在の時刻を取得しました。

  print "$query executed successfully at ",localtime;
  print "$query executed successfully at ",(localtime);
  print "$query executed successfully at ".(localtime);

出力

 executed successfully at 355516731103960
 executed successfully at 355516731103960
 executed successfully at Wed Apr  7 16:55:35 2010

最初の2つのステートメントは、現在の時刻を日付形式で出力していません。3番目のステートメントは、日付形式でのみ正しい出力を提供します。

私の理解では、最初のものはスカラーコンテキストで値を返すので、数値を返します。

次に、2番目の印刷では、リストコンテキストでのみローカル時間を使用しました。これは、数値出力も提供する理由です。

4

5 に答える 5

31

おそらく、Perlでプログラミングするために学ぶことができる最も重要なことは、コンテキストです。多くの組み込みサブルーチンおよび演算子は、コンテキストに応じて動作が異なります。

print "$query executed successfully at ", localtime, "\n"; # list context
print "$query executed successfully at ",(localtime),"\n"; # list context
print "$query executed successfully at ". localtime, "\n"; # scalar context
print "$query executed successfully at ".(localtime),"\n"; # scalar context

print "$query executed successfully at ", scalar  localtime, "\n"; # scalar context
print "$query executed successfully at ", scalar (localtime),"\n"; # scalar context

これは、ステートメントを分割することでより明確にすることができます。

my $time = localtime; # scalar context
print "$query executed successfully at $time\n";

my @time = localtime; # list context
print "$query executed successfully at @time\n";
于 2010-04-07T13:54:04.493 に答える
10

の戻り値はlocaltimeコンテキストによって異なります。リストコンテキストでは9要素のリストですが、スカラーコンテキストではctime(3)値です。

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime;
my $now_string = localtime;  # e.g., "Thu Oct 13 04:54:34 1994"

ここで、print引数のリストコンテキストを提供します。そのためprint localtime、リストから数値を出力します(デフォルトでは区切り文字なし)。連結演算子(3番目のステートメントのように)または次localtimeのいずれかを使用して、スカラーコンテキストを強制できます。.scalar

print "".localtime;
print scalar localtime;
于 2010-04-07T12:05:59.210 に答える
7

スカラーはスカラーコンテキストを強制します:

print scalar localtime ();

2番目の例では、これは明らかにリストコンテキストであるため、連続した数字のプリントアウトを取得しているだけです。たとえば、

 print join (":", (localtime));

数字がコロンで結合されているのがわかります。

于 2010-04-07T11:32:43.817 に答える
4

最初と2番目の両方がリストコンテキストの値を返しますが、それらはおそらく期待したものではありません。現地時間にパレンを使用しても、何の役にも立ちません。ただし、次のコードを使用して、返されたリストアイテムを個別に取得できます。

@list = ($sec,$min,$hour,$day,$mon,$year_1900,$wday,$yday,$isdst)=localtime;
print join("\n",@list);
于 2010-04-07T12:05:42.510 に答える
0

現在の時刻のタイムスタンプを取得したい場合は、関数time()を使用できます。

于 2013-09-06T07:31:21.177 に答える