|
 |
Het MacFreak® Forum - Voor online ondersteuning in het Nederlands! |
 |
|
 |
|
|
|
|
Bram Beernink
Niet Aanwezig

Een ware MacFreak!
|
Aantal berichten: 1065 | Lid sinds: 06-07-2002 | Geplaatst om: 17:23 - 08-04-2004
Ik heb de volgende code:
| Code: | #!/usr/bin/perl my $j = "j"; &printj; sub printj { print "$j"; }
| Met als uitvoer: j Als ik dit echter verander in:
| Code: | #!/usr/bin/perl sub printj { print "$j"; } my $j = "j"; &printj;
| Krijg ik niets als uitvoer. Hoe kan dat? Als ik trouwens my weg laat, heb ik wel altijd als uitvoer j. Ik zou de reden graag even willen weten, zodat ik geen hoofdbrekers krijg. Alvast bedankt! |
Soon there'll be just two kinds of people: Those who use computers, and those who use Apples. - Think different - iMac 15", 768 MB, 700 Mhz G4 - iBook 14", 1GB, 1.42 Ghz G4, 10.5.5 - MessagePad 2000 - iPod nano silver
|
|
|
|
Sander Cox
Niet Aanwezig

MacFreak Verslaafde MacFreak Donateur
|
Aantal berichten: 701 | Lid sinds: 02-09-2002 | Geplaatst om: 19:44 - 08-04-2004
Doordat je "my" gebruikt wordt het een LOKALE variable en is deze dus niet in de functie scope te zien. En omdat je de variable NA de procedure declareerd is deze niet meer bekend. Moet toegeven dat het een beetje vreemd is. [edit] had eerst niet goed gelezen [/edit] (Bewerkt door Sander Cox om 19:45, 8-04-2004) |
|
|
|
|
Bram Beernink
Niet Aanwezig

Een ware MacFreak!
|
Aantal berichten: 1065 | Lid sinds: 06-07-2002 | Geplaatst om: 20:22 - 08-04-2004
| Maar wat ik vreemd vind, is dat een subroutine wordt uitgevoerd op het moment van aanroep, dus &printj; , en niet op het stuk waar sub printj staat. En aangezien er tussen die twee codes geen verschil zit tussen het moment van aanropen en het declaren, zou dat toch niet moeten uitmaken (in de uitvoer)? Dat is tenminste mijn redenering. Dat verschil snap ik nog niet echt. |
Soon there'll be just two kinds of people: Those who use computers, and those who use Apples. - Think different - iMac 15", 768 MB, 700 Mhz G4 - iBook 14", 1GB, 1.42 Ghz G4, 10.5.5 - MessagePad 2000 - iPod nano silver
|
|
|
|
habay
Niet Aanwezig

Account inactief
|
Aantal berichten: 19 | Lid sinds: 18-03-2004 | Geplaatst om: 23:19 - 08-04-2004
probeer eens: #!/usr/bin/perl sub printstuff { local($string) = @_; print $string; } $j = "j"; &printstuff($j."\n");
|
|
|
|
|
Bram Beernink
Niet Aanwezig

Een ware MacFreak!
|
Aantal berichten: 1065 | Lid sinds: 06-07-2002 | Geplaatst om: 10:05 - 09-04-2004
| Bedankt voor de reactie's. Maar toch snap ik nog steeds het verschil in uitvoer tussen die twee codes niet. Kan iemand dat voor mij uitleggen? |
Soon there'll be just two kinds of people: Those who use computers, and those who use Apples. - Think different - iMac 15", 768 MB, 700 Mhz G4 - iBook 14", 1GB, 1.42 Ghz G4, 10.5.5 - MessagePad 2000 - iPod nano silver
|
|
|
|
Sander Cox
Niet Aanwezig

MacFreak Verslaafde MacFreak Donateur
|
Aantal berichten: 701 | Lid sinds: 02-09-2002 | Geplaatst om: 16:49 - 09-04-2004
Ik snap het verschil, maar ik weet niet of je iets van semantiek/correctheid hebt geleerd ooit? Want dan zou ik met wat kreten kunnen gaan gooien Anders krijg ik het niet zo snel uitgelegd |
|
|
|
|
Bram Beernink
Niet Aanwezig

Een ware MacFreak!
|
Aantal berichten: 1065 | Lid sinds: 06-07-2002 | Geplaatst om: 20:57 - 09-04-2004
Gooi maar |
Soon there'll be just two kinds of people: Those who use computers, and those who use Apples. - Think different - iMac 15", 768 MB, 700 Mhz G4 - iBook 14", 1GB, 1.42 Ghz G4, 10.5.5 - MessagePad 2000 - iPod nano silver
|
|
|
|
Sander Cox
Niet Aanwezig

MacFreak Verslaafde MacFreak Donateur
|
Aantal berichten: 701 | Lid sinds: 02-09-2002 | Geplaatst om: 11:17 - 10-04-2004
Als de Perl compiler het eerste script gaat parsen gebeurt het volgende: { 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 |
|
|
|
|
Bram Beernink
Niet Aanwezig

Een ware MacFreak!
|
Aantal berichten: 1065 | Lid sinds: 06-07-2002 | Geplaatst om: 11:28 - 10-04-2004
| Bedankt voor de reactie. Ik snap het nu wel ongeveer. Ik vind echter dat perl dit niet logisch aanpakt. |
Soon there'll be just two kinds of people: Those who use computers, and those who use Apples. - Think different - iMac 15", 768 MB, 700 Mhz G4 - iBook 14", 1GB, 1.42 Ghz G4, 10.5.5 - MessagePad 2000 - iPod nano silver
|
|
|
|
Bram Beernink
Niet Aanwezig

Een ware MacFreak!
|
Aantal berichten: 1065 | Lid sinds: 06-07-2002 | Geplaatst om: 17:25 - 10-04-2004
| Toch nog een dingetje: Dan zou code 2 zonder my toch ook geen uitvoer moeten krijgen? |
Soon there'll be just two kinds of people: Those who use computers, and those who use Apples. - Think different - iMac 15", 768 MB, 700 Mhz G4 - iBook 14", 1GB, 1.42 Ghz G4, 10.5.5 - MessagePad 2000 - iPod nano silver
|
|
|
|
|
|
|
|
|
|
 |
|
 |
MF-Forum v6.0.0 © 2001/2012 - MacFreak® Interactive Media
|
|
|
|