web-dev-qa-db-fra.com

Comment utiliser l'heure locale de Perl avec print pour obtenir l'horodatage?

J'ai utilisé les déclarations suivantes pour obtenir l'heure actuelle.

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

Sortie

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

Les deux premières instructions n'impriment pas l'heure actuelle dans un format de date . La troisième instruction ne donne que la sortie correcte dans un format de date.

Je crois comprendre que le premier retourne une valeur dans un contexte scalaire, il renvoie donc des nombres.

Ensuite, lors de la deuxième impression, j’ai utilisé localtime uniquement dans un contexte de liste, ce qui explique également la sortie numérique.

23
kiruthika

Peut-être que la chose la plus importante que vous puissiez apprendre pour programmer en Perl est le contexte. De nombreux sous-programmes intégrés et opérateurs se comportent différemment selon le contexte.

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

Cela peut être clarifié en séparant les déclarations.

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

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

La valeur de retour de localtime dépend du contexte. Dans un contexte de liste, il s'agit d'une liste de 9 éléments, alors que dans un contexte scalaire, il s'agit d'une valeur 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"

Maintenant, print fournit le contexte de la liste pour ses arguments. C'est pourquoi print localtime affiche les nombres de la liste (sans séparateur par défaut). Vous pouvez forcer le contexte scalaire sur localtime en utilisant l'opérateur de concaténation . (comme dans votre 3ème instruction) ou en utilisant scalar :

print "".localtime;
print scalar localtime;
10
Eugene Yarmash

scalaire forces contexte scalaire:

print scalar localtime ();

Dans le deuxième exemple, il s’agit clairement d’un contexte de liste, ce qui vous permet d’obtenir une impression des chiffres de manière consécutive. Par exemple, essayez

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

et vous verrez les nombres joints avec deux points.

7
user181548

Le premier et le second renvoient les valeurs du contexte de la liste, mais ils ne correspondent probablement pas à ce que vous attendez. L'utilisation de parens autour de l'heure locale ne fera rien d'utile. Mais vous pouvez utiliser le code suivant pour obtenir ces éléments de liste retournés séparément:

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

Si vous voulez obtenir l’horodatage de l’heure actuelle, vous pouvez simplement utiliser la fonction time ().

0
user2572371