Perl peut-il détecter des tableaux?
J'ai ce script
#!/usr/bin/perl
use warnings;
use strict;
use Data::Dumper;
my %x1 = ();
$x1{"a"} = "e";
my %x2 = ();
$x2{"a"} = ["b","c"];
p(\%x1);
p(\%x2);
sub p {
my $x = shift @_;
print $x->{a};
print "\n";
}
les sorties qui
e
ARRAY(0x2603fa0)
Le problème est que je ne sais pas quand l'entrée est un tableau ou un scalaire, et quand c'est un tableau que je voudrais imprimer ces valeurs.
Peut p
être modifié pour ce faire?
source d'informationauteur Sandra Schlichting
Vous devez vous connecter pour publier un commentaire.
Oui, perl peut détecter ce type d'une variable. Utiliser le ref() fonction. Par exemple:
Voir plus dans cette perlmonks discussion.
Il y a plusieurs façons de détecter un tableau en Perl, chacun avec différentes fonctionnalités.
Donné les variables suivantes:
la ref builtin fonction
la
reftype
fonction à partir du module de base Scalar::Utilla
blessed
fonction de Scalar::Util qui est principalement utilisé pour déterminer si une variable contient un objet que vous pouvez appeler des méthodes sur.l'interception d'une exception
Dans le dernier exemple, la
\@
paire déréférence l'argumentation comme uneARRAY
puis prend immédiatement la référence à elle. C'est un fonctionnement transparent qui renvoie la même valeur si cette valeur est unARRAY
. Si la valeur est surchargé, il sera de retour le tableau ref que le module créé. Toutefois, si la valeur ne peut pas être déréférencés comme unARRAY
perl va lever une exception.Si vous avez besoin de répondre de façon dynamique, utiliser la ref de la fonction.
Si vous voulez juste assez de pression pour une variable, remplacer votre
print ...
avecprint Dumper ...
:De sortie pour votre exemple serait: