現在の時刻を取得するために次のステートメントを使用しました。
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番目の印刷では、リストコンテキストでのみlocaltimeを使用しましたが、なぜ数値も出力されます。
おそらく、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";
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;
scalar はスカラーコンテキストを強制します。
print scalar localtime ();
2番目の例では、それは明らかにリストコンテキストであるため、連続して数値を出力するだけです。たとえば、
print join (":", (localtime));
コロンで結合された数字が表示されます。
最初と2番目の両方がリストコンテキストの値を返しますが、おそらく期待どおりではありません。現地時間で括弧を使用しても、何の役にも立ちません。ただし、次のコードを使用して、返されたリスト項目を個別に取得できます。
@list = ($sec,$min,$hour,$day,$mon,$year_1900,$wday,$yday,$isdst)=localtime;
print join("\n",@list);
現在の時刻のタイムスタンプを取得したい場合は、関数time()を使用できます