#!/usr/bin/perlmy $j = "j";&printj;sub printj {print "$j";}
my $j = "j";&printj;
sub printj {print "$j";}
#!/usr/bin/perlsub printj {print "$j";}my $j = "j";&printj;
[edit] had eerst niet goed gelezen [/edit]
(Bewerkt door Sander Cox om 19:45, 8-04-2004)
#!/usr/bin/perl
sub printstuff { local($string) = @_; print $string; }
$j = "j"; &printstuff($j."\n");
{ declare binnen huidige scope variable J geef j een waarde declareer procedure printj (in dezelfde scope als var. j) roep de procedure aan}nu is de J variable dus degene die is gedeclareerd via "my j"
Code 2 is het echter:{ declareer procedure printj (deze heeft GEEN kennis van de later te declareren "my $j" (want dat is hij nog niet tegen gekomen declareer var. j in de huidige scope, dit is dus NIET de scope die de functie gebruikt. geef var j een waarde roep procedure aan}
Het probleem is dus dat de "my j" niet gedeclareerd voor de procedure. Daardoor staat hij niet op de variabele stack die wordt gebruikt bij het defineren van de procedure. Als de parser anders zou werken zou het wel kunnen maar schiijnbaar hebben de Perl makkers ervoor gekozen om het zo te doen.Exacte termen van wat het nu is zou ik op moeten zoeken... is al weer een jaar geleden dat ik daarvan college heb gevolgd
(Bewerkt door Bram Beernink om 22:43, 10-04-2004)