Eigene Funktionen in Perl
Eigene Funktionen in Perl definiert man mit dem Schlüsselwort sub:
sub meine_funktion {
...
}
Die Argumente dieser Funktion werden in der speziellen Variable @_ gespeichert, und darauf kann man direkt zugreifen, oder indirekt über die Funktion shift, die das erste Element zurückliefert:
sub myjoin {
my $val = shift;
return "$val: " . (join ", ", @_) . "\n";
}
print myjoin('foo', 1, 2, 3); # Ausgabe: foo: 1, 2, 3
# ohne Klammern gehts auch:
my $string = myjoin 'foo', 1, 2, 3;
Eine andere Möglichkeiten das schreiben:
sub myjoin {
my ($val, @rest) = @_;
return "$val: " . (join ", ", @rest) . "\n";
}
Wenn eine Funktion immer eine vorher bekannte Anzahl von Argumenten erwartet, kann man auch Prototypen dafür angeben:
sub summe($$) {
my ($lval, $val) = @_;
return $lval + $val;
}
Wenn man diese Funktion aufruft bevor sie deklariert wird, und man use warnings; im Code stehen hat, bekommt man eine Warnung:
main::summe() called too early to check prototype at foo.pl line 3.
Das kann man damit umgeben, dass man gleich am Anfang den Prototyp hinschreibt:
sub summe($$);
# restlicher Code hier
sub summe($$) {
my ($lval, $val) = @_;
return $lval + $val;
}
Dieser Artikel ist ein weiterer aus der Reihe “Suchbegriffe, mit denen Leute auf meine Perl 6-Seite gefunden haben”.

Stefan said,
June 22, 2007 @ 12:34 am
Versteh ich nicht!
Renée Bäcker said,
July 20, 2007 @ 11:29 am
Nur als Hinweis: Dass man die Klammern bei eigenen Subs weglassen kann funktioniert aber nur wenn man die Sub vor dem Aufruf deklariert hat. Also ein
#!/usr/bin/perl
use strict;
use warnings;
sub test1{
print @_;
}
test1 1,2,5,8;
funktioniert, ein
#!/usr/bin/perl
use strict;
use warnings;
test1 1,2,5,8;
sub test1{
print @_;
}
jedoch nicht…