ich habe eine function definiert:
sub test(\%\$\$) { ... }
und rufe die später mittels:
my $value = test(%{$h_ref},${$s_ref},${$s_ref})
auf, aber es kommt das folgende warning:
main:test called too early to check prototype
weiss jemand wie ich das verhindere?
User since
2003-08-04
14371
Artikel
ModeratorIn
das hier funktioniert:
#! c:\perl\bin\perl
use strict;
use warnings;
sub test($$$); # hier ist der Prototyp
test({name => 'dies'},'ist','ein');
sub test($$$){
my ($hashref,$d,$e) = @_;
print $hashref->{name};
}
Also schon vor dem Aufruf einen Prototypen der Methode anlegen!
User since
2003-08-04
5873
Artikel
ModeratorIn
Wenn Du sie wirklich "später" aufrufst, brauchst Du eigenltich den Prototypen nicht. Aber Deine Fehlermeldung lässt darauf schließen, dass Du den Prototyp oder die Definition der Funktion weiter nach vorne im Quellcode verschieben musst.\n\n
<!--EDIT|Crian|1092254305-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite
User since
2003-08-04
14371
Artikel
ModeratorIn
Ja, man kann es natürlich auch so machen (Wie Crian schon sagte):
#! c:\perl\bin\perl
use strict;
use warnings;
sub test($$$){
my ($hashref,$d,$e) = @_;
print $hashref->{name};
}
test({name => 'dies'},'ist','ein');
Aber ich persönlich habe die Definition der Methoden lieber am Ende des Programms...
User since
2003-08-04
12208
Artikel
Admin1
ich finde es am elegantesten, subs mit prototypen in ein modul auszulagern.
wenn man das per 'use' einbindet, werden die subs früh genug definiert...