Thread Grundsatzfrage zum Aufruf einer Sub (8 answers)
Opened by RPerl at 2007-03-24 11:31

betterworld
 2007-03-24 17:45
#75325 #75325
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Das stimmt imho nicht ganz, was Ronnie und kristian geschrieben haben.

Bei grab(@domains) werden nicht die Werte des Arrays kopiert.  Es wird fuer jedes Element des Arrays ein Alias uebergeben.  Ausprobieren kann man das so:
Code: (dl )
1
2
3
4
5
6
sub grab {
  $_[0] = "zwei";
}
my @array = ("eins");
grab (@array);
print "@array\n"; # Ausgabe ist zwei

Oft faengt man jedoch eine Subroutine so an:
Code: (dl )
1
2
sub grab {
  my ($stuff, $blah) = @_;

Hier werden tatsaechlich alle Werte kopiert, aber das kommt nicht von der Aufrufart.  Da diese Art, eine Subroutine zu schreiben, aber meist komfortabler ist als staendig $_[0] etc. zu verwenden, kann man den Aufruf ueber grab(\@array) vorziehen.  Was auch nur mit einer Array-Referenz geht, ist, dass man die Laenge des Arrays veraendert.

View full thread Grundsatzfrage zum Aufruf einer Sub