Was machen die eckigen Klammern bedeuten im folgenden push-syntax in Perl?
Stieß ich auf diese syntax, während Sie Lesen ein Skript. Ich bin nicht sicher, was ist die Verwendung von eckigen Klammern.
push @data, [ split //, $line ]; #printing this array gives crap values
Oder in anderen Worten, was ist der Unterschied zwischen der obigen und der folgenden?
push @data, (split//, $line); #printing this gives actual values
Irgendwelche Vorschläge?
- Was rufen Sie Mist ist nicht so. Verwenden
Data::Dumper
zum drucken von komplexen Datenstrukturen. - Neben
perldoc perlreftut
, check-outperldoc perllol
undperldoc perldsc
für viel mehr über Referenzen, wie zu machen und zu nutzen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Code:
schiebt alle Elemente in der aktuellen Zeile in
@data
und
Schiebt eine Referenz auf ein anonymes array enthält die Elemente in
@data
Wenn Sie immer nur mit der Verarbeitung eines Wert von '$Zeile' es ist wahrscheinlich effektiver in der Nutzung der ehemaligen*1 , jedoch, wenn Sie mit der Verarbeitung einer Datei mit mehreren Zeilen und Sie möchten, um zu differenzieren zwischen den Zeilen der Inhalt ist auf, letzteres ist effektiver.
Betrachten:
Dieser wird der Ertrag all der gelesenen bytes als einzelne Zeichen, ein einzelnes
array mit allen, also:
Wenn dies stattdessen tun werden, ist etwas ganz anderes:
Sind und stattdessen Gruppe Zeilen etwa so:
So können Sie später programmgesteuert Durchlaufen es einfacher.
Hinweis:
und
Gleichwertig sind.
Auch,
und
gleichwertig sind.
Vom
perldoc -f push
*1: tatsächlich, tbf, jemand mit einem halben Gehirn würde wahrscheinlich wollen
@data = split //, $line
[ ... ]
ist ... stackoverflow.com/questions/1114522/... zeigt den code in Frage in Zusammenhang.[]
, und es lohnt sich zu erinnern, dass die Referenzen werden nie erwähnt in Learning Perl. Ich sage nicht, dass Referenzen nicht wichtig für jemanden, der ernsthaft über Perl, aber ich vermute, dass viel von scripting oder Wartung-nur Perl-Programmierer nur selten Referenzen verwenden.Ist von einem meiner Antworten:
@data
ist ein array von array-Referenzen. Jedes element@data
ist eine Referenz auf einen anonymen array, dessen Einträge das Zeichen in$line
.Siehe auch perldoc perlreftut.