Ich muss feststellen, ob ein Perl-Hash einen bestimmten Schlüssel hat, aber dieser Schlüssel wird einem undef-Wert zugeordnet. Insbesondere liegt die Motivation dafür darin, boolesche Flags zu sehen, während getopt()
mit einer darin übergebenen Hash-Referenz verwendet wird. Ich habe bereits diese Website und Google gesucht, und exists()
und defined()
scheinen nicht für die Situation anwendbar zu sein, sie sehen nur, wenn der Wert für einen bestimmten Schlüssel nicht definiert ist, sie überprüfen nicht, ob der Hash tatsächlich die hat Schlüssel. Wenn ich hier ein RTFM bin, weisen Sie bitte auf das Handbuch hin, das dies erklärt.Wie kann ich feststellen, ob ein Perl-Hash eine Schlüsselzuordnung zu einem nicht definierten Wert enthält?
Antwort
existiert() und() definiert scheinen nicht für die Situation anwendbar zu sein, sie sehen nur, wenn der Wert für einen bestimmten Schlüssel nicht definiert ist, sie Überprüfen Sie nicht, ob der Hash tatsächlich den Schlüssel
Falsch hat. Das ist in der Tat, was defined()
tut, aber exists()
tut genau das, was Sie wollen:
my %hash = (
key1 => 'value',
key2 => undef,
);
foreach my $key (qw(key1 key2 key3))
{
print "\$hash{$key} exists: " . (exists $hash{$key} ? "yes" : "no") . "\n";
print "\$hash{$key} is defined: " . (defined $hash{$key} ? "yes" : "no") . "\n";
}
produziert:
$hash{key1} exists: yes $hash{key1} is defined: yes $hash{key2} exists: yes $hash{key2} is defined: no $hash{key3} exists: no $hash{key3} is defined: no
Die Dokumentation für diese beiden Funktionen in der Befehlszeile an perldoc -f defined
verfügbar ist und perldoc -f exists
(oder Lesen Sie die Dokumentation für alle Methoden unter perldoc perlfunc
*). Die offizielle Web-Dokumentation ist hier:
* Da Sie speziell RTFM erwähnt, und Sie können nicht von den Orten der Perl-Dokumentation darüber im Klaren sein, lassen Sie mich auch darauf hinweisen, dass Sie einen vollständigen Index aller perldocs bei perldoc perl
oder http://perldoc.perl.org erhalten können.
Wenn ich deine Frage richtig lese, denke ich, du bist verwirrt über exists. Von der documentation:
exists EXPR
ein expression Given, der ein hash element oder array element specifies, returns true, wenn das specified element im hash oder array ever initialized hat been, even wenn Der entsprechende Wert ist nicht definiert.
Zum Beispiel:
use strict;
use warnings;
my %h = (
foo => 1,
bar => undef,
);
for my $k (qw(foo bar baz)){
print $k, "\n" if exists $h{$k} and not defined $h{$k};
}
Kurze Antwort:
if (exists $hash{$key} and not defined $hash{$key}) {
...
}
- 1. Wie kann ich feststellen, ob eine .woff-Schriftart Hinweise enthält?
- 2. Wie kann ich feststellen, ob ein großes JSON-Objekt einen Wert enthält?
- 3. PHP: Wie kann man feststellen, ob eine Zeichenfolge Sonderzeichen enthält?
- 4. Wie kann ich feststellen, ob ein Zweig eine Fehlerkorrektur in Perforce enthält?
- 5. Ermitteln, ob ein Java.awt.Rectangle enthält eine Java.awt.Color
- 6. Wie kann ich feststellen, ob ein Index eine Spalte vom Typ varchar (max) enthält?
- 7. Wie kann ich feststellen, ob eine Liste ein drittes Element enthält?
- 8. Wie kann ich feststellen, ob eine Funktion ein Diagramm generiert
- 9. Wie kann ich feststellen, ob ein `NSManagedObject` gelöscht wurde?
- 10. Wie kann ich feststellen, ob ich ein Speicherleck habe?
- 11. Wie kann ich in Java feststellen, ob ein Char-Array ein bestimmtes Zeichen enthält?
- 12. Wie kann ich feststellen, ob ein Browser ein Popup blockiert?
- 13. In einem finally-Block kann ich feststellen, ob eine Ausnahme
- 14. Wie kann ich feststellen, ob eine Klasse serialisiert werden kann?
- 15. Wie kann ich feststellen, ob ein Wert in einem Array einem Wert in einem anderen Array in Javascript entspricht?
- 16. Wie kann ich feststellen, ob eine zusammengesetzte Formatzeichenfolge ungültig ist?
- 17. Wie kann ich feststellen, ob ein Realm erfolgreich aktualisiert wurde?
- 18. Wie kann ich feststellen, ob eine C-Ganzzahlvariable signiert ist?
- 19. Wie kann ich feststellen, ob ein MySQL-Prozess blockiert ist?
- 20. Wie kann ich feststellen, ob ein Popup vollständig geladen wurde?
- 21. Wie kann ich feststellen, ob ein Benutzer einen Laptop verwendet?
- 22. Wie kann ich feststellen, ob ein Polyeder konvex ist?
- 23. Wie kann man am besten feststellen, ob ein Skalar ein Dateihandle enthält?
- 24. Wie kann ich feststellen, ob eine Java-Ganzzahl null ist?
- 25. Wie kann ich feststellen, ob ein geschlossener Pfad einen bestimmten Punkt enthält?
- 26. Wie kann ich feststellen, ob ein Paket RTP/RTCP ist?
- 27. Wie kann ich feststellen, ob ein Outlook-Ordner öffentlich ist?
- 28. Wie kann ich feststellen, ob ein ActiveX-Steuerelement geladen ist?
- 29. Wie kann ich feststellen, ob ein BPM-Prozess erfolgreich war?
- 30. Wie kann ich feststellen, ob eine .pem-Datei einen öffentlichen oder privaten Schlüssel enthält?