Ich drucke meinen Hash weiterhin als Anzahl der zugewiesenen Eimer. Wie drucke ich den Inhalt meines Hash?
Ohne Verwendung einer while
Schleife wäre am meisten vorzuziehen (zum Beispiel wäre ein Einzeiler am besten).
Data :: Dumper ist dein Freund.
use Data::Dumper;
my %hash = ('abc' => 123, 'def' => [4,5,6]);
print Dumper(\%hash);
wird ausgegeben
$VAR1 = {
'def' => [
4,
5,
6
],
'abc' => 123
};
&
Operator in C und C ++. Der Grund, warum dies in diesem Zusammenhang wichtig ist, ist, dass in Perl, wenn Sie eine Funktion mit einem Hash-Wert als Argument aufrufen, dieser Hash-Wert aufgelistet und in mehrere Argumente erweitert wird - dies%hsh=("a" => 1, "b" => 2); foo(%hsh);
entspricht alsofoo("a", 1, "b", 2)
. Wenn Sie stattdessen die Funktion für den Betrieb auf dem Hash wollen selbst, müssen Sie einen Verweis auf die Hash weitergeben müssen:foo(\%hsh);
Siehe perldoc.perl.org/perlsub.html#Pass-by-ReferenceEinfach:
Elegant, aber tatsächlich 30% langsamer (!):
quelle
print "$_ $h{$_}\n" for (keys %h);
,$k
existiert in diesem Beispiel nicht.for
Schleife ist schneller als diewhile
bis zu mindestens 10.000 Schlüssel: gist.github.com/151792Hier erfahren Sie, wie Sie ohne Verwendung drucken können
Data::Dumper
quelle
Zum Debuggen werde ich oft verwenden
YAML
.Ergebnisse in:
Andere Male werde ich verwenden
Data::Dump
. Sie müssen nicht so viele Variablen festlegen, damit es in einem schönen Format ausgegeben wird, als Sie es tunData::Dumper
.In jüngerer Zeit habe ich
Data::Printer
zum Debuggen verwendet.(Ergebnis kann auf einem Terminal viel bunter sein)
Im Gegensatz zu den anderen Beispielen, die ich hier gezeigt habe, dient dieses Beispiel explizit nur zur Anzeige. Dies wird leichter angezeigt, wenn Sie die Struktur einer gebundenen Variablen oder die eines Objekts ausgeben.
quelle
=>
wie erwartet ausgibt . Stattdessen wird immer der Schlüssel, mehrere Leerzeichen und dann der Wert gedruckt. Dies hilft einem Menschen, die Ausgabe zu scannen.Die Antwort hängt davon ab, was in Ihrem Hash enthalten ist. Wenn Sie einen einfachen Hash haben, einen einfachen
oder
wird tun, aber wenn Sie einen Hash haben, der mit Referenzen gefüllt ist, werden Sie etwas, das diese Referenzen durchlaufen und eine vernünftige Ausgabe erzeugen kann. Dieses Durchlaufen der Referenzen wird normalerweise als Serialisierung bezeichnet. Es gibt viele Module, die unterschiedliche Stile implementieren. Einige der beliebtesten sind:
Data::Dumper
Data::Dump::Streamer
YAML::XS
JSON::XS
XML::Dumper
Aufgrund der Tatsache, dass
Data::Dumper
es Teil der Perl-Kernbibliothek ist, ist es wahrscheinlich die beliebteste. Einige der anderen Module haben jedoch sehr gute Dinge zu bieten.quelle
Mein Favorit: Smart :: Kommentare
Das ist es.
quelle
use
Smart::Comments
, sehe ich es auch aus dieser Perspektive. Aber an die Theke,Smart::Comments
ist ziemlich gut als artig scoped Modul, sollte es nicht Ausgabeverhalten in jedem Modul sein , das nicht auch nicht verwenden SC. Das Problem würde also mit einer use- Anweisung auf diese Bereiche beschränkt . Wenn Sie sagen, dass ein Wartungsprogrammierer nicht dafür verantwortlich ist, das Dokument zu den enthaltenen Modulen zu lesen, kann ich dem nicht zustimmen. Trotzdem, danke für den KommentarLooping:
Funktionell
Aber für pure Eleganz müsste ich Wrang-Wrang wählen. Für meinen eigenen Code würde ich meinen foreach wählen. Oder Tetro Dumper verwenden.
quelle
foreach
undmap
.map
sollte fürNach meinen Erfahrungen ist es am einfachsten, nur Dumpvalue zu verwenden .
Funktioniert wie ein Zauber und Sie müssen sich keine Gedanken über das Formatieren des Hashs machen, da er wie der Perl-Debugger ausgegeben wird (ideal zum Debuggen). Außerdem ist Dumpvalue im Standardsatz der Perl-Module enthalten, sodass Sie sich nicht mit CPAN herumschlagen müssen, wenn Sie sich hinter einem drakonischen Proxy befinden (wie ich bei der Arbeit bin).
quelle
Wenn Sie pedantisch sein und es in einer Zeile halten möchten (ohne Use Statements und Shebang), dann werde ich mich von Tetrominos Antwort zurückziehen und vorschlagen:
Ich mache nichts Besonderes als den anonymen Hash, um die temporäre Variable zu überspringen;)
quelle
Ich füge jedem Element des Hash ein Leerzeichen hinzu, um es gut zu sehen:
quelle
Ich mag es wirklich, die Schlüssel in einem Liner-Code zu sortieren:
quelle