Thread Array - anonym oder benannt?
(14 answers)
Opened by hugenyn at 2011-02-26 00:20 2011-02-26T21:09:33 hugenyn Nein, meiner Meinung nach hast Du das falsch verstanden. @_ enthält Aliase auf die übergebenen Argumente. Wenn Du Werte in @_ veränderst, veränderst Du die originalen Werte oder bekommst entsprechende Fehler/Warnungen. Das ist vollkommen losgelöst davon, ob Du eine Referenz auf ein benanntes oder anonymes Array übergibst. Du kannst auch eine Liste von Skalaren übergeben und diese über @_ verändern. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #! /usr/bin/perl -l use strict; use warnings; sub exchange_values { # tausche inhalte des ersten und zweiten elements mit Hilfe des @_ (Alias) @_[0,1] = @_[1,0]; } my $hello = 'World!'; my $world = 'Hello '; # kontrolle; so ist's jetzt print $hello, $world; exchange_values( $hello, $world ); # ups; das war eben noch anders print $hello, $world; Quote Falsch, siehe oben. Wenn Du die Originale nicht verändern willst, musst Du @_ oder Teile davon kopieren! Code (perl): (dl
)
1 2 3 4 sub foo ( # originale sind sicher; wir kopieren die Inhalte my ( $anton, $berta ) = @_; } Quote Technisch geht das schon; aber ich glaube [edit3]immer noch, dass Ich wiederhole nochmal: @_ arbeitet über einen Alias-Mechanismus; Änderungen an @_ verändern das Original. Wenn Du Werte kopierst und veränderst, dann musst Du die veränderten Werte mit return() zurückgeben, damit Du damit weiter arbeiten kannst. Technisch kannst Du sehr wohl return @_; verwenden, aber sei Dir im klaren, dass dies über die Aliase in @_ auf die originalen Daten zurückgreift (die Du u.U. vorher via @_ geändert hast). Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 sub exchange_words { # kopiere die Werte in eigene Variablen my ( $word1, $word2 ) = @_; # Woerter tauschen ( $word1, $word2 ) = ( $word2, $word1 ); # gebe die veraenderten Werte zurueck return ( $word1, $word2 ); } my ($hello, $world) = exchange_words( 'world!', 'hello ' ); print $hello, $world; Quote Ich finde diesen Satz so auch nicht korrekt. Was ist für Dich denn ein anonymes Array? Erkennst Du den Unterschied zwischen my @arr = (1,2); foo( \@arr ); und my @arr = (1,2); foo( [@arr] ); und foo( [1,2] );? Kannst Du mir den Unterschied erklären? Quote Siehe oben. Ich fürchte, nicht richtig verstanden ;) Ich habe den Eindruck, dass hier eine Vermischung von "anonymen Arrays" und Referenzen auf Arrays herrscht. Ich rate auch davon ab, "anonymes Array" als Synonym für "Array-Referenz" zu verwenden. Es ist IMHO schlichtweg falsch. Ich würde auch keine "Übersetzung" machen und diese implizit vornehmen. edit(1+2): Lesenswerte Dokumentation zu dem Thema: # Referenzen http://perldoc.perl.org/perlreftut.html http://perldoc.perl.org/perlref.html # Subroutinen http://perldoc.perl.org/perlsub.html Last edited: 2011-02-27 00:57:51 +0100 (CET) meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |