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”.

2 Comments »

  1. Stefan said,

    June 22, 2007 @ 12:34 am

    Versteh ich nicht!

  2. 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…

RSS feed for comments on this post · TrackBack URI

Leave a Comment