Perl shift?


AN_3

Grünschnabel
Hallo,

ich bin Perl Anfänger und habe eine wahrscheinlich einfach zu beantwortende Frage.

Mein Programm lautet:
sub ausgabe ($) {
$text = shift;
print "$text\n";
}

$gruss = "Hallo Welt";
ausgabe $gruss;

Meine Frage:
Was bringt hier der Befehl $text =shift?
Wird shift nicht nur bei Arrays benutzt?
Warum funktioniert das Programm ohne diese Zeile nicht?

Ne etwas ausführlichere Erklärung für Anfänger wär spitze. Danke
 

renee

Erfahrenes Mitglied
Du hast Recht, dass "shift" auf Arrays angewendet wird.

In Perl ist es so, dass Parameter einer Funktion im Spezialarray "@_" (siehe auch http://wiki.perl-community.de/cgi-bin/foswiki/view/Perldoc/perlsub ).

Code:
test( 1,2,3 );

sub test{
    for my $elem ( @_ ) {
        print $elem,"\n";
    }
}
"shift" ohne die Angabe eines Arrays (also wie in Deinem Beispiel), arbeitet mit eben genau diesem Array "@_".

Dein Code könnte also genauso gut so lauten:

Code:
sub ausgabe ($) {
    $text = shift @_;
    print "$text\n";
}