The UNIX and Linux Forums  


Go Back   UNIX og Linux Forums > Top Forums > Shell Programmering og Scripting
.
google unix.com



Shell Programmering og Scripting Post spørgsmål om ksh, CSH, SH, Bash, Perl, PHP, SED, AWK og ANDRE shell scripts og Shell scriptsprog her.

Mere UNIX og Linux Forum Emner du måske kan finde Helpful
Tråd Thread Starter Forum Svar Last Post
Perl: Global Søg og erstat epi8 Shell Programmering og Scripting 3 05-06-2008 04:18 PM
Problem med globale og lokale variabler qzv2jm Shell Programmering og Scripting 2 03-04-2008 01:18 PM
Erklære Global Variables i KLD int80h BSD 1 01-21-2008 09:11 AM
globale variabler i KLD (FreeBSD) int80h Højtstående Programmering 0 01-17-2008 08:14 PM
Hvordan man erklærer globale variabler for shell script risshanth UNIX for dummyer Spørgsmål & svar 2 10-31-2007 03:27 AM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Søg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 08-26-2005
reggiej reggiej is offline
Registreret Bruger
  
 

Join Date: May 2005
Stillinger: 27
perl globale variabler

Kan nogen give mig "forelæsning" på, hvorfor du bør ikke gøre alle dine varables globale når programmering i perl. Jeg har gjort dette, men jeg har hørt, at det ikke er en god praksis.
  #2 (permalink)  
Old 08-26-2005
vertigo23's Avatar
vertigo23 vertigo23 is offline
Registreret Bruger
  
 

Join Date: Jul 2005
Beliggenhed: SF, CA
Stillinger: 73
Fra et rent praktisk point-of-view, er det ikke så meget, at globals er dårlige, som det er, at lokale er virkelig handy. Sige, at du i en løkke, og du ønsker at gøre det samme funktion med en anden data i hver iteration. Hvis du bruger en lokal (min) variabel til foder data til den funktion, du er garanteret, at ingen data fra en tidligere iteration af løkken kan forurene et senere iteration, hvis sige de variable ikke bliver fyldt hver gang.

Også med lokale variabler, kan du genbruge almindelig variabel navne som $ i for-løkke gentagelser og ikke behøver at bekymre sig om, at der allerede er data i de var.
  #3 (permalink)  
Old 08-27-2005
cbkihong cbkihong is offline Forum Advisor  
Advisor
  
 

Join Date: Sep 2002
Beliggenhed: Hong Kong, Kina
Stillinger: 1624
At holde tingene lokale, der skal være lokale er en god husholdning praksis.

Teknisk set, ved hjælp af lokale (min) variabler skyldes behovet for at fjerne namespace sammenstød, men faktum er, det har en noget intet formål. Det er, at sørge for rammerne af en variabel afhænger udelukkende af den leksikale anvendelsesområde alene. Så du kan fortælle omfanget af det variable direkte ved at kigge inden for den nuværende blok og ingen andre steder. Subrutiner aktiveres fra i denne blok vil ikke se den variable. så,


Code:
{  # BLOCK 1
     my $var = 10;
     {  # BLOCK 2
          local $var2 = 100;
          &mysub;
          print "\$var = $var\n";    # (1)
          print "\$var2 = $var2\n"; # (2)
     }
     $var += 10;
     print "\$var = $var\n";         # (3)
     print "\$var2 = $var2\n";      # (4)
}
&mysub;
print "\$var = $var\n";     # (5)
print "\$var2 = $var2\n";  # (6)

sub mysub {
     $var += 2;
     $var2 += 2;
}

Du kan fortælle, at omfanget af "min $ var" er inden BLOK 1, men ikke til subrutiner kaldes indeni. Altså (1) og (3) er 10 og 20 hhv. Så som $ var gjorde mysub () ændring i delrutinen? Det er den globale $ var, som er vist i (5), "4" (2 besværgelser), efter at omfanget af "my $ var" udløber. Som du kan være sikker på omfanget (i stedet for afhængig af kaldstakkens, dvs indlejring af subrutiner at blive kaldt), vil det være lettere at rette fejl, når værdien går galt. Perl giver dig også en variant "lokale", som gennemfører anvendelsesområdet-afhængige-on-call-stack politik (sjælden blandt almindeligt i brug programmeringssprog i dag), så (2), (4), (6), er 102, undef og 2. Dette er en ulempe, at omfanget afhænger af kaldstakkens på kørselstidspunktet, så det er mere forvirrende.

Hvis du har brug for at beskæftige sig med referencer, kan du blive nødt til at udløbe en datastruktur peget på en henvisning på et bestemt tidspunkt i livet af scriptet ved at kontrollere levetiden af referencerne. Hvis dine referencer er angivet med lokale variabler, de vil naturligvis komme uden for rækkevidde, når de indeholder blok opsiger og derefter få ryddet op. Ellers vil referencer som globale variabler hængende, medmindre du overflytte sin værdi. Dette øger chancen for sammenstød, hvis du glemmer at gøre det.

Men huske på, at Perl globale variabler er ikke ægte global (se perlmod manpage), men yderligere underlagt pakken (alias navnerummet) mekanisme. Pakke er den metode, der tager navn sammenstød. Det er vigtigt, da vi bygge komponenter, der er beregnet til at blive genanvendt, så vi ønsker ikke, $ navn er defineret i en komponent, der benyttes til at kollidere med en anden $ navn i mit program. Men jeg kan ikke gå i detaljer om pakker her. Se perlmod manpage eller relevant litteratur for detaljer.

Dette forklarer, hvorfor du skal prøve at sætte din kode i moduler (i det mindste, i forskellige pakker) og bruge lokale variabler det meste af tiden. Ikke alene dette gør din kode mere genbruges, det hjælper også undgå en masse problemer i det lange løb som din kode bliver mere kompliceret, når du forsøger at holde stumper og stykker sammen.
  #4 (permalink)  
Old 08-29-2005
reggiej reggiej is offline
Registreret Bruger
  
 

Join Date: May 2005
Stillinger: 27
Tak for replys. Jeg vil gerne have langt bedre forståelse for betydningen af at bruge lokale.
Closed Thread

Bogmærker

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 06:38 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0