Willkommen in der Webstatt Zum Webstatt Blog und Stories
nuit nuit am 06.09.06 16:02

wenn ich ein Array oder Hash an eine routine übergeben möchte...muss ich das dann als pointer machen? weil irgendwie...wenn ich sie so übergebe, dann haut er mir die in das @_ array rein....und zwar alle einzeln, quasi als paramter...
es ist schön das zu wissen, aber der effekt störend ;)

global möchte ich es nicht machen...gibsch da noch eine variante? oder was ist eine schöne variante...ich hab bisher noch nüx gefunden...

netcup.de Warum gibt es hier Werbung?
milahu milahu am 06.09.06 16:57

http://www.uni-koeln.de/rrzk/kurse/unterlagen/perl.h97/part1/subroutines.html schrob:

Quote
Arrays und Hashes als Parameter
Sie können auch Arrays und Hashes als Parameter übergeben:
@nvekt = &skal_mult($faktor, @old_vekt);

sub skal_mult {
my ($skalar, @vector) = @_;
foreach $elem (@vector) {
$elem *= $skalar;
}
return @vector;
}

Allerdings müssen Sie dabei aufpassen, daß keine Unterlisten erlaubt sind. Aus diesem Grunde können Sie nur ein Hash oder Array übergeben, und das nur als letztes Element. Wollen Sie mehr als einen Hash oder Array übergeben, müssen Sie auf Referenzen (Pointer) zurückgreifen!

Michael Michael am 06.09.06 17:53

Es ist ja auch ganz logisch, da alle Funktionsparameter ein Array sind und Perl somit nie wissen könnte wo die Grenze zwischen zwei Parameter ist.

Allgemein arbeite ich eigentlich immer mit Referenzen (sowohl bei Arrays als auch bei Hashs) und dereferenziere es, sobald nötig.

Außerdem Zeiger sind doch SCHÖN

// edit

auch hübsch:

my @first_array_argument = @{shift(@_)};

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt