23 Stimmen

Wie verwende ich Perl's localtime mit print, um den Zeitstempel zu erhalten?

Ich habe die folgenden Anweisungen verwendet, um die aktuelle Zeit zu ermitteln.

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

Ausgabe

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

Die ersten beiden Anweisungen geben die aktuelle Uhrzeit nicht in einem Datumsformat aus. Die dritte Anweisung liefert nur die korrekte Ausgabe im Datumsformat.

Meines Erachtens gibt die erste einen Wert im skalaren Kontext zurück, gibt also Zahlen zurück.

Im zweiten Druck habe ich localtime nur im Listenkontext verwendet, weshalb es auch eine Zahlenausgabe gibt.

31voto

Brad Gilbert Punkte 33120

Das vielleicht Wichtigste, was Sie für die Programmierung in Perl lernen können, ist der Kontext. Viele eingebaute Unterroutinen und Operatoren verhalten sich je nach Kontext unterschiedlich.

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

Dies kann durch eine Aufteilung der Aussagen deutlicher gemacht werden.

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

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

10voto

Eugene Yarmash Punkte 130008

Der Rückgabewert von localtime hängt vom jeweiligen Kontext ab. Im Listenkontext ist es eine 9-elementige Liste, während es im Skalarkontext ein ctime(3) Wert:

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

Jetzt, print bietet Listenkontext für seine Argumente. Deshalb ist print localtime gibt die Zahlen aus der Liste aus (standardmäßig ohne Trennzeichen). Sie können den skalaren Kontext auf localtime entweder über die . Verkettungsoperator (wie in Ihrer 3. Anweisung) oder mit scalar :

print "".localtime;
print scalar localtime;

7voto

skalar erzwingt skalaren Kontext:

print scalar localtime ();

Im zweiten Beispiel handelt es sich eindeutig um einen Listenkontext, d. h. Sie erhalten lediglich einen Ausdruck der Zahlen in einer Reihe. Versuchen Sie zum Beispiel

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

und Sie werden sehen, dass die Zahlen durch einen Doppelpunkt verbunden sind.

4voto

Mike Punkte 1831

Sowohl die erste als auch die zweite geben die Werte im Listenkontext zurück, aber sie sind wahrscheinlich nicht das, was Sie erwarten würden. Die Verwendung von Parens um localtime herum wird einfach nichts Nützliches bewirken. Sie können jedoch den folgenden Code verwenden, um die zurückgegebenen Listenelemente separat zu erhalten:

@list = ($sec,$min,$hour,$day,$mon,$year_1900,$wday,$yday,$isdst)=localtime;
print join("\n",@list);

0voto

user2572371 Punkte 11

Wenn Sie den Zeitstempel der aktuellen Zeit abfragen möchten, können Sie einfach die Funktion time() verwenden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X