AlexBausW: Rekursion - Warnung wegen Prototype...

Beitrag lesen

Hallo,

hab ein kleines Perlscriptchen geschrieben:

#!perl -w
use strict;
use warnings;

sub showtree($$)
{
[...]
    foreach (@allentries)
    {
        print "$level$_\n";
        showtree( "$level|   ", "$dir\$_");
    }
    closedir DIR;
}

my $startdir = $ARGV[0];
showtree("", $startdir);

[...]

Ich bekomme immer eine Warnung:
main::showtree() called too early to check prototype at D:\perl\dirtree.pl line 18.

Zeile 18 ist die mit dem rekursiven Aufruf.

[...]

Mir ist sowieso nicht ganz klar, wieso es an dieser Stelle (lange nachdem der Prototyp feststeht) noch zu früh ist...

<mode type="suck from my fingertips"> ;)

perl parst Deinen Code, kann aber eine Funktion erst als definiert erkennen, wenn der zugehörige Block auch geschlossen wurde. Wird nun innerhalb des Blocks die Funktion rekursiv aufgerufen, kann perl eben nicht die Prototypen während der Kompilierzeit überprüfen, weil die Definition der Funktion noch nicht beendet ist. Ohne Prototypen ist perl ein premature functioncall equal, weil es ja nichts zur Kompilierzeit zu prüfen gibt. Es könnte höchstens ein Runtime-Error auftreten, falls es die Funktion nicht gibt.

</mode>

Abhilfe schafft sicherlich eine Deklaration mit 'sub showtree($$);' am Anfang des Skripts.

Gruß Alex

--
http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart
ss:) zu:} ls:} fo:| de:[ va:| ch:| sh:( n4:& rl:° br:& js:| ie:| fl:| mo:}