![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrati | Regole Forum | Collegamenti | Album | FAQ | Members List | Calendario | Ricerca | Today's Posts | Mark Forums Read |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Cerca in questo Thread | Rate Thread | Modalità di visualizzazione |
|
|
|
||||
|
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. |
![]() |
| Segnalibri |
| Thread Tools | Cerca in questo Thread |
| Modalità di visualizzazione | Vota questo thread |
|
|