Thread Array::Utils: Wie Rückgabewert als Liste interpretieren (34 answers)
Opened by mika at 2018-11-18 12:25

Linuxer
 2018-11-18 23:55
#189228 #189228
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
2018-11-18T13:47:41 haj
...
Am FAQ-Eintrag, den Raubtier ja ebenfalls angegeben hat, finde ich den ersten Satz ein bisschen irreführend;

Quote
A list is a fixed collection of scalars.


Es ist ein bisschen mehr als das, denn sonst wüsste array_minus( @old, @new) nicht, wo @old aufhört und @new beginnt.


Naja, die Funktion erhält immer noch nur eine Liste von Argumenten. Es ist allerdings durch die Prototypen bei der Definition der Funktion array_minus() festgelegt, dass die Funktion zwei Arrays erwartet, und diese als Referenzen übergeben werden sollen:

Code: (dl )
1
2
3
4
sub array_minus(\@\@) {
my %e = map{ $_ => undef } @{$_[1]};
return grep( ! exists( $e{$_} ), @{$_[0]} );
}


Onne die Prototypen-Definition wüsste die Funktion wirklich nicht, wo @old endet und wo @new beginnt, denn sie erhält nur eine flache Liste von Argumenten (hier wären es die Elemente der beiden Arrays). Dank der Prototypen erwartet die Funktion jetzt genau zwei Arrays, die über diesen Mechanismus als zwei Array-Referenz übergeben werden.
Siehe dazu auch: http://perldoc.perl.org/perlsub.html#Prototypes

PS: Habe Deine Antwort von 19:00 erst hiernach gelesen ;-) Du vermutest ja selber schon Prototypen ;-)
Last edited: 2018-11-18 23:58:30 +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!

View full thread Array::Utils: Wie Rückgabewert als Liste interpretieren