Thread Subroutine Variablenübergabe (19 answers)
Opened by tejste at 2013-09-11 11:00

tejste
 2013-09-11 11:00
#170105 #170105
User since
2012-11-15
21 Artikel
BenutzerIn
[default_avatar]
Hallo Community,

bitte vielleicht kann mir jemand einen Tipp geben. Ich habe eine Subroutine, die einen Zeitstempel errechnet.
Code (perl): (dl )
1
2
3
4
5
6
sub zeit(@_){
my @date = localtime(time);
my $jahr = $date[5]+1900;
my $monat = $date[4]+1;
$zeitstempel = "$jahr$monat$date[3]$date[2]$date[1]$date[0]";
}


Die Subroutine rufe ich so auf
Code (perl): (dl )
1
2
3
sub zeit(@_);
zeit(my $zeitstempel);#Prototyp
open(SPEICHGANSBUCH,'>',"$directorySpeicherdatei/U20130306G1_$zeitstempel.txt") or die "Speicherdatei BUCH nicht gefunden";

Der Code macht was er soll, er schreibt hinter die zu speichernde Datei einen Zeitstempel, was mich aber stört ist die Meldung:

Prototype after '@' for main::zeit : @_ at I:\BESTAX\Usta\strawberry\files\usta\
Gaenssfuesse_weg.pl line 18

Wofür brauche ich den Prototyp überhaupt, ist das so etwas wie eine Instanz in Java?
Was will mir die Meldung sagen?
Variablenübergabe?: ich schreibe in die Subroutine als Übergabevariable das Array @_ rein, aber ich will nur die Variable $zeitstempel übergeben, wenn ich aber in die Subroutine reinschreibe

Code (perl): (dl )
sub($zeitstempel) {etc}


dann kommt als Fehlermeldung: illegal Arguments. Kann mir jemand in erläutern, was Perl da tut oder will.
Eine Frage noch: die Variablendeklaration mit "my" irritiert mich etwas. Ich verstehe die Subroutinen als eigene abgeschlossene Module, jede Variable, die ich dort definiere bleibt beschränkt auf die Subroutine. Warum möchte Perl das ich die Variable schon bei der Anfrage definiere? Dazu müßte ich jedes Mal in die Subroutine reinschauen, welche Variable schon ein "my" und welche nicht; ich glaub, ich habs noch nicht kapiert mit der Variablenübergabe.
Ich möchte diese Sub gerne in eigene eigene Datei auslagern, aber da sollte die schon fehlerfrei laufen.
Vielen Dank für das durchlesen.

View full thread Subroutine Variablenübergabe