webForumDet fria alternativet

My??

5 svar · 260 visningar · startad av nordan

nordanMedlem sedan juni 2000949 inlägg
#1

Vad är skillnad mellan

My $namn ="nordan";

och

$namn = "nordan";

/nordan

[Redigerat av nordan den 07 mar 2001]

CssonMedlem 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

------------------
Erimax.com
Cykelsemester

[Redigerat av Csson den 07 mar 2001]

nordanMedlem 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

JojoxxMedlem 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.

------------------

/ J

nordanMedlem sedan juni 2000949 inlägg
#5

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

FlashXMedlem 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]

129 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)