The UNIX and Linux Forums  


Go Back   UNIX e Linux Forum > Inizio Forum > Shell scripting e di programmazione
.
google unix.com



Shell scripting e di programmazione Pubblica domande su KSH, CSH, SH, Bash, Perl, PHP, sed, awk e da altri script di shell e linguaggi di scripting shell qui.

Più di UNIX e Linux Forum Argomenti potreste trovare utili
Filo Thread Starter Forum Risposte Ultimo Post
Perl: Global Ricerca e sostituzione epi8 Shell scripting e di programmazione 3 05-06-2008 04:18 PM
Problema con le variabili globali e locali qzv2jm Shell scripting e di programmazione 2 03-04-2008 01:18 PM
Dichiarare le variabili globali in KLD int80h BSD 1 01-21-2008 09:11 AM
variabili globali in KLD (FreeBSD) int80h Di programmazione ad alto livello 0 01-17-2008 08:14 PM
Come dichiarare le variabili globali per script di shell risshanth UNIX for Dummies Domande & Risposte 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 Cerca in questo Thread Rate Thread Modalità di visualizzazione
  #1 (permalink)  
Old 08-26-2005
reggiej reggiej is offline
Utente Registrato
  
 

Iscriviti Data: maggio 2005
Interventi: 27
perl variabili globali

Qualcuno mi può dare "la lezione" sul perché non si deve fare tutti i vostri varables globale, quando la programmazione perl. Ho fatto questo, ma ho sentito che non è una buona pratica.
  #2 (permalink)  
Old 08-26-2005
vertigo23's Avatar
vertigo23 vertigo23 is offline
Utente Registrato
  
 

Iscriviti Data: luglio 2005
Ubicazione: SF, CA
Interventi: 73
Dal punto di vista puramente pratico punto di vista, non è tanto che globals sono male, come è che i locali sono davvero a portata di mano. Dire che stai in un ciclo, e si vuole fare lo stesso con una diversa funzione di dati in ogni iterazione. Se si utilizza un locale (il mio) per l'alimentazione dei dati variabile alla funzione, è la garanzia che non vi sono dati da una precedente iterazione del loop può inquinare una successiva iterazione, se dire la variabile non viene riempito ogni volta.

Inoltre, con le variabili locali, è possibile ri-uso comune, come nomi di variabile $ i loop per iterazioni e non si devono preoccupare di essere già dati in var.
  #3 (permalink)  
Old 08-27-2005
cbkihong cbkihong is offline Forum Advisor  
Advisor
  
 

Join Date: Sep 2002
Posizione: Hong Kong, Cina
Interventi: 1.624
Mantenere le cose che dovrebbero essere locale locali è una buona prassi di pulizia.

Tecnicamente parlando, utilizzando locali (la mia) variabili deriva dalla necessità di eliminare nomi scontri, ma il fatto è che ha un po 'estranei scopo. Questo è, per assicurarsi che la portata di una variabile dipende unicamente dalla portata solo lessicale. Quindi si può dire il campo di applicazione della variabile da guardare direttamente all'interno del blocco corrente e non altrove. Subroutine invocata da questo blocco non sarà visibile la variabile. così,


Codice:
{  # 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;
}

Si può dire che il campo di applicazione della "mia $ var" è all'interno di BLOCK 1, ma non all'interno di subroutine chiamata. Quindi, (1) e (3) sono 10 e 20 rispettivamente. Dunque, che cosa ha fatto $ var mysub () modifica del subroutine? E 'il global $ var, che è mostrato in (5), "4" (2 invocazioni) dopo il campo di applicazione della "mia $ var" scadenza. Come si può essere certi del campo di applicazione (a seconda, invece di chiamare la pila, cioè il raggruppamento di subroutine che si chiama), sarà più facile per il debug quando il valore va storto. Perl offre anche una variante "locale" che attua il campo-dipende-on-call-stack politica (raro tra comunemente in uso oggi, linguaggi di programmazione), in modo (2), (4), (6) sono 102, e undef 2. Questo è uno svantaggio che la portata dipende dalla stack di chiamate durante l'esecuzione in modo che sia più confusione.

Se avete bisogno di trattare con i riferimenti, si può avere bisogno di una struttura di dati scade sottolineato da un riferimento a un certo punto del ciclo di vita di script mediante il controllo del ciclo di vita dei riferimenti. Se il tuo riferimenti sono dichiarate le variabili locali che, naturalmente, di uscire quando il campo di applicazione contenenti blocco termina e successivamente ripulito. In caso contrario, i riferimenti globali variabili bastone intorno a meno che tu non riassegnare il suo valore. Questo aumenta la possibilità di scontri, se si dimentica di farlo.

Ma tenere a mente che Perl variabili globali non sono veramente globale (si veda la manpage perlmod), ma altri soggetti a pacchetto (alias nomi) meccanismo. Pacchetto è il metodo che si occupa di nome scontri. Questo è importante, come costruire componenti che sono destinati ad essere riutilizzati, in modo che non si desidera che il nome definito $ componente utilizzato in uno scontro con un altro a $ nome mio programma. Ma io non sono in corso i dettagli dei pacchetti qui. Vedere la manpage perlmod o letteratura per i dettagli.

Questo spiega il motivo per cui si dovrebbe cercare di mettere il codice in moduli (almeno, in diversi pacchetti) e usare le variabili locali la maggior parte del tempo. Non solo questo rende il codice più riutilizzabili, ma anche aiuta a prevenire un sacco di problemi a lungo termine in quanto il codice diventa più complicata quando si tenta di bastone di bit e pezzi insieme.
  #4 (permalink)  
Old 08-29-2005
reggiej reggiej is offline
Utente Registrato
  
 

Iscriviti Data: maggio 2005
Interventi: 27
Grazie per la replys. Io sono molto più meglio capire l'importanza di utilizzare i locali.
Closed Thread

Segnalibri

Thread Tools Cerca in questo Thread
Cerca in questo Thread:

Ricerca Avanzata
Modalità di visualizzazione Vota questo thread
Vota questo thread:

Distacco regolamento
Tu non può post nuovo thread
Tu non può inviare una risposta
Tu non può postare allegati
Tu non può modificare i tuoi post

BB codice è Su
Smilies sono Su
[IMG] codice Su
Codice HTML è Chiuso
Trackbacks sono Su
Pingbacks sono Su
Refbacks sono Su




Tutti gli orari sono GMT -4. La data di oggi è 02:04 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traduzioni Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX e Linux Forum Content Copyright © 1993-2009. Tutti i diritti Reserved.Ad di gestione da RedTyger

Contenuti pertinenti URL da vBSEO 3.2.0