subroutine mit prototyp
alex
- perl
0 Rolf Rost0 Christian Kruse0 alex
hi folx!
also mal ne frage ich habe eine prozedur:
sub test(%$$) { mach was... }
und weiter unten rufe ich die auf:
my $value = test(%{$h_ref}, ${$s_ref}, ${$s_ref});
dabei kommt mir immer folgender fehler:
called too early to check prototype
wie kann ich das denn umgehen und warum ruf ich was zu früh auf?
hi,
also mal ne frage ich habe eine prozedur:
sub test(%$$) { mach was... }
ist mir nicht geläufig. Andererseits kannst Du mit
sub test($$$){ # ... }
Die Anzahl der zu übergebenden Argumente auf GENAU 3 festlegen, also je nach Anzahl der $ Zeichen...
und weiter unten rufe ich die auf:
my $value = test(%{$h_ref}, ${$s_ref}, ${$s_ref});
Prüfe da mal den Context, links hast Du ein Scalar, rechts einen hash und eine Liste...
dabei kommt mir immer folgender fehler:
called too early to check prototypewie kann ich das denn umgehen und warum ruf ich was zu früh auf?
Wahrscheinlich hängt das mit Deiner Sub-Deklaration zusammen, die so nicht stimmen kann, siehe oben. Stets kannst Du nur Scalare in Subfunktionen geben, bzw. Referenzen (sind ja auch scalare) oder Listen (ein Array, mehrere Scalare).
Gruss, Rolf
Die Anzahl der zu übergebenden Argumente auf GENAU 3 festlegen, also je nach Anzahl der $ Zeichen...
genau 3 skalare, was aber wenn ich 3 referenzen übergeben will?
ich weiss referenzen sind skalare aber es kommt dann trotzdem n fehler...
ich will einfach nur folgendes in der function vereinfachen:
if ( (@_!=3) || (ref($_[0]) ne "HASH") || (ref($_[1]) ne "SCALAR") || (ref($_[2]) ne "SCALAR") ) { brich ab... }
das ist mir zu umständlich weil jede function andere argumente haben kann... deswegen dachte ich mit prototypes zu experimentieren
my $value = test(%{$h_ref}, ${$s_ref}, ${$s_ref});
Prüfe da mal den Context, links hast Du ein Scalar, rechts einen hash und eine Liste...
wo ist das problem? meine function gibt eine skalarreferenz zurück...
alex
hi,
das ist mir zu umständlich weil jede function andere argumente haben kann... deswegen dachte ich mit prototypes zu experimentieren
sub test($$$){} # legt nur die Anzahl der Args fest, nicht jedoch, um was es sich handelt (hashref, scalarref usw...)
my $value = test(%{$h_ref}, ${$s_ref}, ${$s_ref});
Prüfe da mal den Context, links hast Du ein Scalar, rechts einen hash und eine Liste...
Sorry, da habch Dich falsch verstanden.
Aber machs lieber so:
my $value = test(%hash, $x, $x);
%hash -> referenz auf einen hash
$x -> referenz auf Skalar $x ...
Gruss, Rolf
Hallo Alex,
zunaechst mal: ich wuerde mir ueberlegen, die Prototypen zu
verwenden, die funktionieren bei Perl5 manchmal nicht richtig.
[...]
dabei kommt mir immer folgender fehler:
called too early to check prototypewie kann ich das denn umgehen und warum ruf ich was zu früh auf?
Du musst erst den Prototypen definieren, am besten ganz oben direkt
unter den Modulen:
sub test(%$$);
sub test(%$$) {
# irgendwas
}
Grüße,
CK
Du musst erst den Prototypen definieren, am besten ganz oben direkt
unter den Modulen:sub test(%$$);
super, das geht!
leider gabs dazu nirgends ne anständige doku wo das erklärt wurde, und die fehlermeldung war nicht selbsterklärend...
aber cheers!
danke.