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.
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";
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;
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.
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);
Si vous voulez obtenir l’horodatage de l’heure actuelle, vous pouvez simplement utiliser la fonction time ().