PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl - "nested" Subrutinen, Sichtbarkeiten?



ThorstenHirsch
08-06-2005, 15:39
Hi.

Ich wundere mich gerade warum das folgende Skript 1,3,3 ausgibt und nicht 1,2,3:

#!/usr/bin/perl

sub eins
{
print "eins\n";
zwei();

sub zwei
{
print "zwei\n";
}
}

sub zwei
{
print "drei\n";
}

eins();
zwei();
Eigentlich hätte ich erwartet, dass innerhalb der Subrutine eins() die "nested" Subrutine zwei() (die "2" ausgibt) die andere Subrutine mit dem gleichen Name (die "3" ausgibt) überschreibt.

Letztendlich will ich auf folgende Frage hinaus:
Wie erstelle ich Subrutinen innerhalb einer Subrutine, auf die außerhalb dieser Subrutine nicht zugegriffen werden kann?

Gruß
Thorsten

michael.sprick
08-06-2005, 17:17
Ja, also mit NICHT-anonymen Funktionen, die Du überlädst, ist das so´ne Sache in Perl. Ganz geblickt habe ich das auch nie... es geht aber mit einer anonymen Sub und einer Referenz problemlos. Die innere Sub bildet dabei ihren eigenen Gültigkeitsbereich...


#!/usr/bin/perl
use strict;

sub eins()
{
print "eins\n";
local *zwei = sub { print "zwei\n"};
zwei();
}
sub zwei()
{
print "drei\n";
}

eins();
zwei();


hth, Michael

ThorstenHirsch
09-06-2005, 11:09
Dankeschön!