Ich erhalte einen Hash von Hashes von einer anderen Funktion, und einige Elemente des Hashs von Hashes können ein anderer Hash sein. Wie kann ich testen, ob etwas ein Hash ist?Wie kann ich testen, dass "etwas" ein Hash in Perl ist?
Antwort
Je nachdem, was Sie wollen, Sie ref
oder reftype
(das ist in Scalar::Util
, ein Kernmodul) verwendet werden müssen. Wenn die Referenz ein Objekt ist, gibt ref
die Klasse des Objekts anstelle des zugrunde liegenden Referenztyps zurück, reftype
gibt immer den zugrunde liegenden Referenztyp zurück. obwohl
if (ref $var eq ref {}) {
print "$var is a hash\n";
}
use Scalar::Util qw/reftype/;
if (reftype $var eq reftype {}) {
print "$var is a hash\n";
}
@brian d foy Kennen Sie das Wort "tf" nicht? Es ist wie "wenn", aber mehr. –
Also, eine stärkere Version von if? Gibt es auch eine schwächere Version? –
@brain d foy Ja, es gibt "ɨf". –
Verwenden ref
Funktion:
ref($hash_ref) eq 'HASH' ## $hash_ref is reference to hash
ref($array_ref) eq 'ARRAY' ## $array_ref is reference to array
ref($hash{$key}) eq 'HASH' ## there is reference to hash in $hash{$key}
Dieser Test funktioniert nicht für Hash-ähnliche Objekte: '$ r = {}; segne $ r," fail "; print ref $ r' – mob
Ich denke nicht verletzend Objektverkapselung ist eine gute Idee. –
Es gibt auch einige falsche Positive hier. '$ array = []; segne $ array, 'HASH'; print ref $ array; 'druckt' HASH'. Nicht dass du das jemals tun solltest. –
use Params::Util qw<_HASH _HASH0 _HASHLIKE>;
# for an unblessed hash with data
print "$ref is a hash\n" if _HASH($ref);
# for an unblessed hash empty or not
print "$ref is a hash\n" if _HASH0($ref);
# for a blessed hash OR some object that responds as a hash*
print "$ref is hashlike\n" if _HASHLIKE($ref);
* overload
durch
Sie die letzte wahrscheinlich nicht brauchen.
siehe Params::Util
'Params :: Util :: _ HASHLIKE' ruft 'Scalar :: Util :: reftype' auf, prüft aber auch, ob sein Argument den Hash-Dereferenzierungsoperator überlastet - dies erkennt Objekte, die sich als Hashrefs ausgeben können, selbst wenn es sich nicht wirklich um Hashrefs handelt. – mob
@mobrule: Ja, ich weiß. Ich dachte nur, zwei Möglichkeiten zu präsentieren würde ihn zum Link führen, um den Unterschied zu sehen. Ich fügte eine Notiz hinzu, dass er es wahrscheinlich nicht brauche. – Axeman
ich immer isa
verwendet haben, aber wenn die Sache geprüft wird kein Objekt ist (oder auch nicht ein Objekt sein), können Sie es wie die Funktion UNIVERSAL::isa
aufrufen müssen:
if (UNIVERSAL::isa($var, 'HASH')) { ... }
- 1. Wie ein Perl-Hash
- 2. Wie kann man herausfinden, ob ein Perl-Hash multidimensional ist?
- 3. Wie kann ich testen, ob etwas mit jQuery versteckt ist?
- 4. Wie konvertiere ich ein Array zu einem Hash in Perl?
- 5. Wie interpoliere ich ein Perl-Hash-Element in einer Zeichenfolge?
- 6. Wie kann ich STDIN testen, ohne in Perl zu blockieren?
- 7. Wie kann ich zwei Arrays einem Hash in Perl zuweisen?
- 8. Wie kann ich einen Hash von Hashes in Perl erstellen?
- 9. Einen Hash von Hash in Perl filtern
- 10. Filter ein bestimmtes Hash-Tag in Perl
- 11. Wie kann ich einen Perl-Hash im C-Code erstellen?
- 12. Perl, Hash in Array konvertieren
- 13. Doppelte Hash-Werte in Perl
- 14. wie man Perl Hash zu Javascript Hash
- 15. Wie kann ich testen, ob ein mit einem Muster übereinstimmender Dateiname in Perl existiert?
- 16. Druck Hash in Perl
- 17. Wie greife ich Array von Hash in Perl?
- 18. Wie testen, dass ein Fehler nicht auftritt?
- 19. Wie kann ich prüfen, ob ein Schlüssel in einem tiefen Perl-Hash existiert?
- 20. Wie kann ich ein Perl 6-Modul überprüfen?
- 21. schnell ein Perl-Hash von Hashes filtern
- 22. Perl Hash-Schleife durch
- 23. In Perl, wie verarbeite ich einen ganzen Hash?
- 24. Perl-Hash-Referenzierung
- 25. Perl - Initialisierung von Hash
- 26. Wie rufe ich einen Funktionsnamen auf, der in Perl in einem Hash gespeichert ist?
- 27. Wie kann ich diese Flask App testen?
- 28. wie Hash-Karte in Perl zu verwenden
- 29. Wie lade ich eine Datei in einen Perl-Hash?
- 30. Wie kann ich 1000 Dateien erstellen, mit denen ich ein Skript testen kann?
mögliche Duplikate von [Wie kann ich feststellen, welcher Werttyp in einer Perl-Variablen enthalten ist?] (Http://stackoverflow.com/questions/1731333/how-do-i-tell-what-type-of-value -is-in-a-perl-variable) – Ether