My??

Perl & Ruby

5 svar · 266 visningar · startad av nordan

Medlem sedan juni 2000949 inlägg
Trådstart#1

Vad är skillnad mellan

My $namn ="nordan";

och

$namn = "nordan";

/nordan

[Redigerat av nordan den 07 mar 2001]

Medlem sedan feb. 2000438 inlägg
#2

Förenklat kan man säga att my() gör att enbart det block (samt eventuella underblock) till det nuvarande vet om att variabeln finns. Ex:

sub funktion {
    my $foo = 1;

    if($foo == 1) {
       my $bar = 2;
    }
    
    # Här är $foo = 1, men $bar finns inte.
}

Dokumentation

/Csson

Medlem sedan juni 2000949 inlägg
#3

Hej!
Vad jag förstår av perl så skulle man kunna skriva så här oxå och få samma effect eller?
sub funktion {
$foo = 1;
if($foo == 1) {
$bar = 2;
}

}
Jag hajjar inte riktigt tror jag
/
nordan

Medlem sedan juni 20004 308 inlägg
#4

Tittar du på $foo utan för funktionen (eller $bar utanför if-sasten) så ser du skillnaden. I ditt fall finns variablerna kvar, men inte i Cssons exempel.

Har du ett stort och komplext script kan det vara smart att "avgränsa" variablerna på detta vis så att de inte krockar med varandra.

Medlem sedan juni 2000949 inlägg
#5

hmm Känner mig lite trög nu men jag fattar iaf inte riktigt ju :r
/
nordan

Medlem sedan nov. 19991 033 inlägg
#6

Gör du mindre skript så kan du köra som du brukar nordan. Det anses naturligtvis bättre att deklarera sina variabler om man nu ska göra det riktigt, men brukar själv inte vara så noga med det.

Anledningen är att du i stora skript (särskilt om du använder "require" kanske börjar glömma bort vilka namn du haft tidigare och då döper variabler med samma namn.
Rent logiskt så blir det ju snabbt en konflikt någonstans.

Mest problem får man nog om man kör mod_perl eftersom variablerna ligger kvar efter att skriptet körts klart. Det innebär att nästa skript som körs får värden från ett tidigare skript om det innehåller samma variabler och därmed ett oväntat resultat.

[red.]
Det var inte menat att uppmana till slarvigt skrivna skript :)
Man bör såklart alltid deklarera sina variabler och att programmera med flaggan -w (eller rent av use strict; gör naturligtvis att man lär sig perl på rätt sätt och samtidigt får ett bra fungerande skript.

Det var mest avsett så du förstod skillnaden :)

[Redigerat av FlashX den 08 mar 2001]

383 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
238 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
237 ms — ändringar (db)