File Coverage

blib/lib/POD2/IT/Getopt/Long.pm
Criterion Covered Total %
statement 9 9 100.0
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 12 12 100.0


line stmt bran cond sub pod time code
1             package POD2::IT::Getopt::Long;
2              
3 1     1   28137 use 5.004;
  1         5  
  1         44  
4 1     1   6 use strict;
  1         2  
  1         37  
5 1     1   5 use vars qw($VERSION $VERSION_ORIG);
  1         14  
  1         363  
6             $VERSION = '1.02';
7             $VERSION_ORIG = '1.35';
8              
9             1;
10             #__END__
11              
12             =pod
13              
14             =head1 NAME
15              
16             Getopt::Long - Elaborazione estesa delle opzioni a linea di commando
17              
18             =head1 SYNOPSIS
19              
20             use Getopt::Long;
21             my $data = "file.dat";
22             my $length = 24;
23             my $verbose;
24             $result = GetOptions ("length=i" => \$length, # numero
25             "file=s" => \$data, # stringa
26             "verbose" => \$verbose); # flag
27              
28             =head1 DESCRIPTION
29              
30             Il modulo Getopt::Long implementa una funzione getopt estesa chiamata
31             GetOptions(). Questa funzione aderisce alla sintassi POSIX per le opzioni a
32             linea di comando, con le estensioni GNU. In generale, questo significa che le
33             ozioni hanno nomi lunghi al posto di singole lettere e sono precedute dal
34             doppio trattino "--". Il supporto per raggruppare le opzioni a linea di
35             comando, come era il caso con il più tradizionale approccio a singole lettere è
36             fornito ma non è abilitato per default.
37              
38             =head1 Opzioni a linea di comando: una introduzione
39              
40             I programmi prendono tradizionalmente i loro argomenti dalla linea di comando,
41             per esempio nomi di file o altre informazioni che il programma necessita di
42             conoscere. Oltre agli argomenti, i programmi prendono spesso anche I a
43             linea di comando. Le opzioni non sono necessarie al corretto funzionamento del
44             programma, da cui il nome 'opzione', ma sono usate per modificarne il
45             comportamento di default. Per esempio, un programma potrebbe fare il suo lavoro
46             silenziosamente, ma un'opportuna opzione potrebbe fornire informazioni
47             descrittive su quello che sta facendo.
48              
49             Le opzioni a lina di comando vengono specificate in diversi modi. Storicamente,
50             sono precedute da un singolo trattino C<->, e sono costituite da singole
51             lettere.
52              
53             -l -a -c
54              
55             Solitamente, questi caratteri singoli possono venire raggruppati:
56              
57             -lac
58              
59             Quando le opzioni posso avere dei valori, il valore è posto dopo l'opzione,
60             alcune volte con un spazio in mezzo, alcune volte no:
61              
62             -d 24 -d24
63              
64             A causa della natura molto criptica di queste opzioni, è stato sviluppato un
65             altro stile che usa i nomi lunghi. Così, anziché usare una opzione criptica
66             C<-l>, è possibile usare quella più descrittiva C<--lungo>.
67             Per distinguere un raggruppamento di opzioni a singolo carattere da una opzione
68             con nome lungo, vengono usati due trattini per precedere il nome dell'opzione.
69             Le prime implementazioni delle opzioni con nomi lunghi usavano il carattere
70             C<+>. Inoltre, i valori di una opzione con nome lungo possono essere specificati
71             sia con:
72              
73             --dimensione=24
74              
75             che con:
76              
77             --dimensione 24
78              
79             La forma C<+> è diventata obsoleta ed è fortemente deprecata.
80              
81             =head1 Iniziare ad usare Getopt::Long
82              
83             Getopt::Long è il successore Perl5 di C. Questo è stato il primo
84             modulo Perl che ha fornito il supporto per la gestione del nuovo stile delle
85             opzioni a linea di comando con nomi lunghi, da cui il nome Getopt::Long. Questo
86             modulo inoltre supporta le opzioni a singolo carattere e il loro
87             raggruppamento. Le opzioni a singolo carattere possono essere un qualsiasi
88             carattere alfabetico, un punto interrogativo e un trattino. Le opzioni a nomi
89             lunghi possono essere una serie di lettere, cifre e trattini. Anche se
90             attualmente questo non è fatto rispettare da Getopt::Long, multipli trattini
91             consecutivi non sono permessi ed il nome dell'opzione non deve terminare con un
92             trattino.
93              
94             Per usare Getopt::Long da un programma Perl, dovete includere la seguente linea
95             nei vostri programmi Perl:
96              
97             use Getopt::Long;
98              
99             Questo caricherà il nucleo del modulo Getopt::Long e preparerà il vostro
100             programma per usarlo. Gran parte dell'attuale codice di Getop::Long non viene
101             caricato fino a che realmente una delle sue funzioni non viene chiamata.
102              
103             Nella configurazione di default, i nomi delle opzioni possono essere abbreviati
104             fino a che rimangono unici (all'unicità), maiuscole/minuscole non sono
105             importanti e un singolo trattino è sufficiente, anche per i nomi di opzione
106             lunghi. Inoltre, le opzioni possono essere disposte fra gli argomenti
107             non-opzione. Si veda L per maggiori informazioni su
108             come configurare Getopt::Long.
109              
110             =head2 Opzioni semplici
111              
112             Le opzioni più semplici sono quelle che non prendono valori. La loro semplice
113             presenza sulla linea di comando abilita l'opzione. Esempi diffusi sono:
114              
115             --all --verbose --quiet --debug
116              
117             La gestione delle opzioni semplici è chiara:
118              
119             my $verbose = ''; # variabile di opzione con un valore di (falso)
120             my $all = ''; # variabile di opzione con un valore di default (falso)
121             GetOptions ('verbose' => \$verbose, 'all' => \$all);
122              
123             La chiamata a GetOptions() analizza gli argomenti della linea di comando
124             presenti in C<@ARGV> a imposta la variabile di opzione a C<1> se l'opzione è
125             presente nella linea di comando. Altrimenti la variabile di opzione viene
126             ingorata. Settare l'opzione ad un valore vero è spesso chiamato I
127             l'opzione.
128              
129             Il nome dell'opzione come specificato alla funzione GetOptions() è chiamato
130             I dell'opzione. Più avanti vedremo che questa specifica può
131             contenere più cose che il solo nome dell'opzione. Il riferimento alla variabile
132             è chiamato I dell'opzione.
133              
134             GetOptions() restituirà un valore vero se la linea di comando sarà
135             processasta con successo. Altrimenti scriverà un messaggio di errore sullo
136             STDERR e restituirà un valore falso.
137              
138             =head2 Opzioni un po' meno semplici
139              
140             Getopt::Long supporta due utili varianti delle opzioni semplici: le opzioni
141             I e le opzioni I.
142              
143             Una opzione negabile è specificata con un punto esclamativo C dopo il nome
144             dell'opzione:
145              
146             my $verbose = ''; # variabile di opzione con un valore di default (falso)
147             GetOptions ('verbose!' => \$verbose);
148              
149             Ora, l'uso di C<--verbose> a linea di comando abiliterà C<$verbose>, come
150             previsto. Tuttavia è anche permesso l'uso di C<--noverbose> che disabiliterà
151             C<$verbose> impostandone il valore a C<0>. Usando un opportuno valore di
152             default, il programma può sapere quando C<$verbose> è falso per default oppure
153             è stato disabilitato con C<--noverbose>.
154              
155             Un'opzione incrementale è specificata con il carattere più C<+> dopo il nome
156             dell'opzione:
157              
158             my $verbose = ''; # variabile di opzione con un valore di default (falso)
159             GetOptions ('verbose+' => \$verbose);
160              
161             L'uso di C<--verbose> a linea di comando incrementerà il valore di C<$verbose>.
162             In questo modo il programma può tenere traccia di quante volte l'opzione è
163             stata scritta nella linea di comando. Per esempio, ogni occorrenza di
164             C<--verbose> potrebbe aumentare il livello di verbosità del programma.
165              
166             =head2 Mischiare le opzioni a linea di comando con gli altri argomenti
167              
168             Solitamente i programmi prendono le opzioni a linea di comando così come altri
169             argomenti, come ad esempio, nomi di file. È buona pratica specificare sempre
170             prima le opzioni e poi gli altri argomenti. Getopt::Long, tuttavia, permette di
171             mescolare opzioni e argomenti ripulendo tutte le opzioni prima di passare il
172             resto degli argomenti al programma. Per interrompere Getopt::Long dal
173             processare ulteriori argomenti, inserite un doppio trattino C<--> sulla linea
174             di comando:
175              
176             --dimensione 24 -- --all
177              
178             In questo esempio, C<--all> I verrà considerata come un'opzione, ma sarà
179             passata al programma in C<@ARGV>.
180              
181             =head2 Opzioni con valori
182              
183             Per le opzioni che prevedono valori, deve essere specificato se il valore
184             dell'opzione è obbligatorio oppure no e quale tipo di valore l'opzione prevede.
185              
186             Sono supportati tre tipi di valori: numeri interi, numeri a virgola mobile e
187             stringhe.
188              
189             Se il valore dell'opzione è obbligatorio, Getopt::Long assegnerà alla variabile
190             di opzione l'argomento della linea di comando che è immediatamente dopo
191             l'opzione. Se tuttavia il valore dell'opzione è facoltativo, l'assegnamento
192             sarà fatto soltanto se quel valore non assomiglia ad una opzione della linea di
193             comando.
194              
195             my $tag = ''; # variabile di opzione con un valore di default
196             GetOptions ('tag=s' => \$tag);
197              
198             Nella definizione dell'opzione, il nome dell'opzione è seguito da un segno di
199             uguale C<=> e dalla lettera C. Il segno di uguale indica che questa opzione
200             richiede un valore. La lettera C indica che questo valore è una stringa
201             arbitraria. Altri tipi possibili per il valore sono C per numeri interi e
202             C per numeri a virgola mobile. Usando i due punti C<:> anziché il segno di
203             uguale, indichiamo che il valore dell'opzione è opzionale. In questo caso, se
204             non viene fornito alcun valore adatto, alle opzioni di stringa viene assegnata
205             una stringa vuota C<''>, mentre le opzioni numeriche vengono impostate a C<0>.
206              
207             =head2 Opzioni con valori multipli
208              
209             A volte le opzioni prendono diversi valori. Per esempio, un programma
210             potrebbe usare più directory per cercare i file di libreria:
211              
212             --library lib/stdlib --library lib/extlib
213              
214             Per fare ciò, specificate semplicemente un riferimento ad un array come
215             destinazione dell'opzione:
216              
217             GetOptions ("library=s" => \@libfiles);
218              
219             Alternativamente, potete specificare che l'opzione può avere valori multipli
220             aggiungendo una "@" e passando come destinazione un riferimento ad uno scalare:
221              
222             GetOptions ("library=s@" => \$libfiles);
223              
224             Usato con l'esempio qui sopra, C<@libfiles> (o C<@$libfiles>) conterrebbe le
225             stringhe C<"lib/srdlib"> e C<"lib/extlib">, in quest'ordine. È inoltre
226             possibile specificare numeri interi o a virgola mobile come soli valori
227             accettabili.
228              
229             È spesso utile permettere liste di valori separate da virgole assieme alle
230             occorrenze multiple delle opzioni. Ciò è facilmente ottenibile usando gli
231             operatori Perl split() e join():
232              
233             GetOptions ("library=s" => \@libfiles);
234             @libfiles = split(/,/,join(',',@libfiles));
235              
236             Ovviamente è importante scegliere il giusto separatore di stringa per ogni
237             scopo.
238              
239             Attenzione: quella che segue è una funzionalità sperimentale.
240              
241             Le opzione possono accettare valori multipli in una volta sola, ad esempio:
242              
243             --coordinate 52.2 16.4 --colorergb 255 255 149
244              
245             Questo può essere ottenuto aggiungendo uno specificatore di ripetizione alla
246             definizione dell'opzione. Gli specificatori di ripetizione sono molto simili
247             agli specificatori di ripetizione C<{...}> che possono essere usati nelle
248             espressioni regolari. Per esempio, la suddetta linea di comando andrebbe
249             gestita nel modo seguente:
250              
251             GetOptions('coordinate=f{2}' => \@coor, 'colorergb=i{3}' => \@colore);
252              
253             La destinazione per l'opzione deve essere un array o un riferimento ad un
254             array.
255              
256             È inoltre possibile specificare il numero minimo e massimo di argomenti che un
257             opzione può prendere. C indica un'opzione che prende almeno due
258             argomenti e non più di 4. C indica uno o più valori; C
259             indica zero o più valori.
260              
261             =head2 Opzioni con valori hash
262              
263             Se la destinazione dell'opzione è un riferimento ad un hash, l'opzione prenderà
264             come valore stringhe nel formato IC<=>I. Il valore sarà
265             memorizzato nell'hash con la chiave specificata.
266              
267             GetOptions ("define=s" => \%defines);
268              
269             Alternativamente potete usare:
270              
271             GetOptions ("define=s%" => \$defines);
272              
273             Ad esempio, con la seguente linea di comando:
274              
275             --define os=linux --define vendor=redhat
276              
277             l'hash C<%defines> (o C<%$defines>) conterrà due chiavi, C<"os"> con valore
278             C<"linux> e C<"vendor"> con valore C<"redhat">. È inoltre possibile specificare
279             numeri interi o a virgola mobile come soli valori accettabili. Le chiavi sono
280             invece prese sempre per essere stringhe.
281              
282             =head2 Subroutine definite dall'utente per gestire le opzioni
283              
284             Un ultimo controllo su cosa dovrebbe essere fatto quando c'è
285             un'opzione sulla linea di comando, può essere realizzato specificando un
286             riferimento ad una subroutine (o ad una subroutine anonima) come destinazione
287             dell'opzione. Quando GetOptions() incontra l'opzione, chiamerà la subroutine
288             con due o tre argomenti. Il primo argomento è il nome dell'opzione. Se la
289             destinazione è uno scalare o un array, il secondo argomento è il valore
290             dell'opzione. Se la destinazione è un hash, il secondo argomento è la chiave
291             dell'hash e il terzo argomento è il valore dell'opzione. Spetta poi alla
292             subroutine memorizzare il valore da qualche parte, o fare qualunque altra cosa
293             opportunamente.
294              
295             Una banale applicazione di questo meccanismo è quella di implementare opzioni
296             legate le une alle altre. Per esempio:
297              
298             my $verbose = ''; # variabile di opzione con un valore di default (falso)
299             GetOptions ('verbose' => \$verbose,
300             'quiet' => sub { $verbose = 0 });
301              
302             In questo esempio C<--verbose> e C<--quiet> controllano la stessa variable
303             C<$verbose>, ma le assegnano valori opposti.
304              
305             Nel caso la subroutine debba segnalare un errore, dovrebbe chiamare die() con
306             il messaggio di errore desiderato come suo argomento. GetOptions() intercetterà
307             la chiamata a die(), stamperà il messaggio di errore e registrerà che un
308             risultato di errore deve essere restituito per il completamento.
309              
310             Se il testo del messaggio di errore comincia con un punto esclamativo C,
311             allora sarà interpretato in modo speciale da GetOptions(). Attualmente c'è un
312             solo comando speciale implementato: C indurrà GetOptions() a
313             interrompere l'elaborazione delle opzioni a linea di comando, come se
314             incontrasse un doppio trattino C<-->.
315              
316             =head2 Opzioni con nomi multipli
317              
318             Spesso è user-friendly fornire i nomi mnemonici alternativi per le opzioni. Ad
319             esempio C potrebbe essere un nome alternativo a C. I nomi
320             alternativi possono essere inclusi nella specifica dell'opzione, separati dal
321             carattere C<|>. Ad esempio:
322              
323             GetOptions ('lunghezza|altezza=f' => \$lunghezza);
324              
325             Il primo nome è chiamato nome I, gli altri nomi sono detti
326             I. Quando si usa un hash per memorizzare le opzioni. la chiave dovrà
327             sempre essere un nome primario.
328              
329             Nomi alternativi multipli sono possibili.
330              
331             =head2 Maiuscole/minuscole e abbreviazioni
332              
333             Senza configurazioni aggiuntive, GetOptions() ignorerà maiuscole/minuscole dei
334             nomi delle opzioni e permetterà di abbreviare i nomi delle opzioni all'unicità
335             (cioè fino a che rimangono unici).
336              
337             GetOptions ('lunghezza|altezza=f' => \$lunghezza, 'altimetro' => \$altimetro);
338              
339             Questo consente di specificare C<--l> e C<--L> per l'opzione 'lunghezza', ma
340             è necessario come minimo specificare C<--alti> e C<--alte> rispettivamente per le
341             opzioni 'altimetro' e 'altezza'.
342              
343             =head2 Sommario delle specifiche di opzione
344              
345             Ogni specificatore di opzione consiste di due parti: il nome della specifica
346             l'argomento della specifica.
347              
348             Il nome della specifica contiene il nome dell'opzione, opzionalmente seguito da
349             una lista dei nomi alternativi separati dal carattere C<|>.
350              
351             lunghezza il nome dell'opzione è "lunghezza"
352             lunghezza|dimensione|l il nome è "lunghezza", gli alias sono "dimensione" e "l"
353              
354             L'argomento della specifica è opzionale. Se omesso, l'opzione è considerata
355             booleana, e il valore 1 sarà assegnato quando l'opzione è usata a linea di
356             comando.
357              
358             L'argomento della specifica può essere
359              
360             =over 4
361              
362             =item !
363              
364             L'opzione non prende argomenti e può essere negata precedendola con "no" o
365             "no-". Per esempio C<"foo!"> consentirà sia l'opzione C<--foo> (le sarà assegnato
366             il valore 1) che le opzioni C<--nofoo> e C<--no-foo> (le sarà assegnato il
367             valore 0). Se l'opzione ha degli pseudonimi, questo verrà applicato anche ad
368             essi.
369              
370             L'uso della negazione su una opzione a singola lettera quando ci sono
371             raggruppamenti è ininfluente e genererà un avvertimento.
372              
373             =item +
374              
375             L'opzione non accetta argomenti e il suo valore verrà incrementato di 1 ad ogni
376             occorrenza nella linea di comando. Ad esempio C<"ancora+">, se usata con
377             C<--ancora --ancora --ancora>, incrementerà il suo valore tre volte restituendo
378             il valore 3 (supponendo che fosse inizialmente 0 o undef).
379              
380             Lo specificatore C<+> viene ignorato se la destinazione dell'opzione non è uno
381             scalare.
382              
383             =item = I [ I ] [ I ]
384              
385             L'opzione richiede un argomento di un determinato tipo. I tipi supportati sono:
386              
387             =over 4
388              
389             =item s
390              
391             Stringa. Un arbitraria sequenza di caratteri. Il valore del'argomento può
392             iniziare con C<-> o C<-->.
393              
394             =item i
395              
396             Intero. Sequenza di cifre opzionalmente preceduti dal segno meno o più.
397              
398             =item o
399              
400             Intero esteso, in stile Perl. Questo può iniziare con un segno meno o più
401             seguito da una sequenza di cifre, o una stringa ottale (uno zero, opzionalmente
402             seguito da '0', '1', .. '7'), o una stringa esadecimale (C<0x> seguito da '0'
403             .. '9', 'a' .. 'f', maiuscole/minuscole sono ininfluenti), o una stringa
404             binaria (C<0b> seguito da una serire di '0' e '1').
405              
406             =item f
407              
408             Numero reale. Per esempio C<3.14>, C<-6.23E24> e così via.
409              
410             =back
411              
412             Il I può essere C<@> o C<%> per specificare che la
413             destinazione dell'opzione è un lista o un hash. Questo è necessario solamente
414             quando la destinazione del valore dell'opzione non è altrimenti specificata e
415             dovrebbe essere omessa quando non necessario.
416              
417             I specifica il numero di valori che questa opzione prende in ogni
418             occorrenza nella linea di comando. Ha il formato C<{> [ I ] [ C<,> [
419             I ] ] C<}>.
420              
421             I indica il numero minimo di argomenti. Il valore di default è 1 per le
422             opzioni con C<=> e 0 per le opzioni con C<:>. Si noti che I sovrascrive la
423             semantica di C<=> / C<:>.
424              
425             I indica il numero massimo di argomenti. Deve essere almeno I. Se
426             I non è specificato, I, non c'è limite superiore al numero
427             di argomenti presi.
428              
429             =item : I [ I ]
430              
431             Come C<=>, ma l'argomento è opzionale.
432             Se non specificato, al valore dell'opzione verrà assegnata una stringa vuota se
433             I è una stringa e il valore zero se I è un numero.
434              
435             Si noti che, per le opzioni di tipo stringa, se l'argomento inizia con with C<->
436             o C<-->, questo verrà considerato come una nuova opzione.
437              
438             =item : I [ I ]
439              
440             Come C<:i>, ma se l'argomento non viene specificato, al valore dell'opzione
441             verrà assegnato il valore I.
442              
443             =item : + [ I ]
444              
445             Come C<:i>, ma se l'argomento non viene specificato, il valore corrente
446             dell'opzione verrà incrementato di 1.
447              
448             =back
449              
450             =head1 Uso avanzato
451              
452             =head2 Interfaccia ad oggetti
453              
454             Getopt::Long può essere anche usato con un'interfaccia ad oggetti:
455              
456             use Getopt::Long;
457             $p = new Getopt::Long::Parser;
458             $p->configure(...opzioni di configurazione...);
459             if ($p->getoptions(...descrizioni delle opzioni...)) ...
460              
461             Le opzioni di configurazione possono essere passare al costruttore:
462              
463             $p = new Getopt::Long::Parser
464             config => [...opzioni di configurazione...];
465              
466             =head2 Sicurezza dei thread
467              
468             Getopt::Long è thread-safe quando si usa ithreads a partire dal Perl 5.8. Non è
469             thread-safe usando la vecchia implementazione (sperimentale ed ora obsoleta)
470             dei threads che è stata aggiunta in Perl 5.005.
471              
472             =head2 Documentazione e testi di aiuto
473              
474             Getopt::Long incoraggia l'uso di Pod::Usage per produrre i messaggi di aiuto.
475             Ad esempio:
476              
477             use Getopt::Long;
478             use Pod::Usage;
479              
480             my $man = 0;
481             my $help = 0;
482              
483             GetOptions('help|?' => \$help, man => \$man) or pod2usage(2);
484             pod2usage(1) if $help;
485             pod2usage(-exitstatus => 0, -verbose => 2) if $man;
486              
487             __END__
488              
489             =head1 NAME
490              
491             esempio - Uso di Getopt::Long e Pod::Usage
492              
493             =head1 SYNOPSIS
494              
495             esempio [opzioni] [file ...]
496              
497             Opzioni:
498             -help breve messagio di aiuto
499             -man documentazione completa
500              
501             =head1 OPTIONS
502              
503             =over 8
504              
505             =item B<-help>
506              
507             Stampa un breve messaggio di aiuto ed esce.
508              
509             =item B<-man>
510              
511             Stampa la pagina di manuale ed esce.
512              
513             =back
514              
515             =head1 DESCRIPTION
516              
517             B leggerà il (o i) file specificato in input e farà
518             qualche cosa di utile con il suo contenuto.
519              
520             =cut
521              
522             Si veda L per maggiori informazioni.
523              
524             =head2 Memorizzare i valori delle opzioni in un hash
525              
526             A volte, ad esempio quando ci sono molte opzioni, avere una variabile separata
527             per ciascuna di loro può diventare pesante. GetOptions() supporta, come
528             meccanismo alternativo, la memorizzazione dei valori delle opzioni in un hash.
529              
530             Per ottenere ciò, deve essere passato a GetOptions(), I,
531             un riferimento ad un hash. Per ogni opzione specificata nella linea di comando,
532             il valore dell'opzione sarà memorizzato nell'hash con il nome dell'opzione come
533             chiave. Le opzioni non usate a linea di comando non verranno messe nell'hash,
534             in altre parole, CC (o defined()) può essere utilizzata
535             per testare se un'opzione è stata usata. Lo svantaggio è che verranno generati
536             dei warning se il programma gira con C e usa C<$h{nome_opzione}> senza
537             averla testata prima con exists() o defined().
538              
539             my %h = ();
540             GetOptions (\%h, 'lunghezza=i'); # memorizzerà in $h{lunghezza}
541              
542             Per le opzioni con valori multipli (liste o hash), è necessario utilizzare il
543             carattere C<@> o C<%> dopo il tipo:
544              
545             GetOptions (\%h, 'colori=s@'); # memorizzerà in @{$h{colori}}
546              
547             Per rendere più complicate le cose, l'hash può contenere dei riferimenti alle
548             attuali destinazioni delle opzioni, ad esempio:
549              
550             my $lunghezza = 0;
551             my %h = ('lunghezza' => \$lunghezza);
552             GetOptions (\%h, 'lunghezza=i'); # memorizzerà in $lunghezza
553              
554             Questo esempio è completamente equivalente a:
555              
556             my $lunghezza = 0;
557             GetOptions ('lunghezza=i' => \$lunghezza); # memorizzerà in $lunghezza
558              
559             Ogni combinazione è possibile. Per esempio, le opzioni usate più frequentemente
560             potrebbero essere memorizzate nelle variabili mentre tutte le altre
561             opzioni in un hash:
562              
563             my $verbose = 0; # usata frequentemente
564             my $debug = 0; # usata frequentemente
565             my %h = ('verbose' => \$verbose, 'debug' => \$debug);
566             GetOptions (\%h, 'verbose', 'debug', 'filtro', 'dimensione=i');
567             if ( $verbose ) { ... }
568             if ( exists $h{filtro} ) { ... l'opzione 'filtro' è stata specificata ... }
569              
570             =head2 Raggruppamenti
571              
572             Con il raggruppamento è possibile specificare diverse opzioni a singolo carattere
573             in una sola volta. Ad esempio, se C, C e C sono opzioni valide, con:
574              
575             -vax
576              
577             si imposterebbero tutte e tre.
578              
579             Getopt::Long supporta due livelli di raggruppamento. Per abilitare il
580             raggruppamento, è necessario esguire una chiamata a Getopt::Long::Configure.
581              
582             Il primo livello di raggruppamento può essere abilitato con:
583              
584             Getopt::Long::Configure ("bundling");
585              
586             Configurato in questo modo, le opzioni a singolo carattere possono essere
587             raggruppate ma le opzioni con nome lungo B sempre iniziare col doppio
588             trattino C<--> per evitare ambiguità. Ad esempio, se C, C e C sono
589             opzioni valide,
590              
591             -vax
592              
593             imposterebbe C, C e C, ma
594              
595             --vax
596              
597             imposterebbe C.
598              
599             Il secondo livello di raggruppamento alza questa limitazione e può essere
600             abilitato con:
601              
602             Getopt::Long::Configure ("bundling_override");
603              
604             Ora C<-vax> imposterebbe l'opzione C.
605              
606             Quando un qualsiasi livello di raggruppamento è stato abilitato, i valori delle
607             opzioni possono venire inseriti nel raggruppamento. Per esempio:
608              
609             -h24w80
610              
611             è equivalente a:
612              
613             -h 24 -w 80
614              
615             Una volta configurato il raggruppamento, le opzioni a singolo carattere sono
616             matchate considerando maiuscole e minuscole mentre le opzioni con nomi lunghi
617             sono mathcate ignorando maiuscole e minuscole. Per avere anche le opzioni a
618             singolo carattere matchate ignorando maiuscole e minuscole, usate:
619              
620             Getopt::Long::Configure ("bundling", "ignorecase_always");
621              
622             Va da sé che il raggruppamento può generare abbastanza confusione.
623              
624             =head2 Il trattino solitario
625              
626             Normalmente, un trattino singolo C<-> a linea di comando non è considerato
627             un'opzione. L'elaborazione delle opzioni terminerà (a meno che venga
628             specificato "permute") ed il trattino sarà lasciato in C<@ARGV>.
629              
630             È possibile avere un trattamento speciale per il singolo trattino. Questo può
631             essere ottenuto aggiungendo una specifica di opzione con un nome vuoto, per
632             esempio:
633              
634             GetOptions ('' => \$stdio);
635            
636             Un trattino singolo a linea di comando ora sarà un'opzione valida e, se usato,
637             verrà impostata la variabile C<$stdio>.
638              
639             =head2 Callback per gli argomenti
640              
641             L'opzione particolare C<< <> >> può essere usata per indicare una subroutine
642             per la gestione di argomenti che non siano un'opzione. Quando GetOptions()
643             incontra un argomento che non assomiglia ad un'opzione, immediatamente chiamerà
644             questa subroutine e le passerà un parametro: il nome dell'argomento.
645              
646             Per esempio:
647              
648             my $larghezza = 80;
649             sub processa { ... }
650             GetOptions ('larghezza=i' => \$larghezza, '<>' => \&processa);
651              
652             Con la seguente linea di comando:
653              
654             arg1 --larghezza=72 arg2 --larghezza=60 arg3
655              
656             verrà chiamato C quando C<$larghezza> ha il valore C<80>,
657             C quando C<$larghezza> è C<72>, e C quando
658             C<$larghezza> è C<60>.
659              
660             Questa funzionalità richiede l'opzione di configurazione B, si veda la
661             sezione L.
662              
663             =head1 Configurare Getopt::Long
664              
665             Getopt::Long può essere configurato chiamando la funzione
666             Getopt::Long::Configure(). Questa subroutine ha come argomento una lista di
667             stringhe quotate, ognuna relativa all'opzione di configurazione che si vuole
668             abilitare, ad esempio C, o disabilitare, ad esempio
669             C. Maiuscole e minuscole vengono ignorate. E' possibile
670             chiamare Configure() più volte.
671              
672             Alternativamente, dalla versione 2.24, le opzioni di configurazione possono
673             essere specificate con il comando C:
674              
675             use Getopt::Long qw(:config no_ignore_case bundling);
676              
677             Sono disponibili le seguenti opzioni:
678              
679             =over 12
680              
681             =item default
682              
683             Questa opzione reimposta tutte le opzioni di configurazione ai valori di
684             default.
685              
686             =item posix_default
687              
688             Questa opzione ripristina il valore di default di tutte le opzioni di
689             configurazione come se la variabile di ambiente POSIXLY_CORRECT fosse stata
690             settata.
691              
692             =item auto_abbrev
693              
694             Permette ai nomi di opzione di essere abbreviati all'unicità (cioè fino a che
695             rimangono unici). Per default questa opzione è abilitata a meno che la variabile
696             di ambiente POSIXLY_CORRECT non sia stata settata, nel qualo caso C
697             è disabilitata.
698              
699             =item getopt_compat
700              
701             Consente l'utilizzo di C<+> per specificare le opzioni.
702             Per default questa opzione è abilitata a meno che la variabile di ambiente
703             POSIXLY_CORRECT non sia stata settata, nel qualo caso C è
704             disabilitata.
705              
706             =item gnu_compat
707              
708             C controlla quando la forma C<--opt=> è consentita e cosa dovrebbe
709             fare. Senza C, C<--opt=> produce un errore. Con C,
710             C<--opt=> restituirà l'ozione C e un valore vuoto. Questo è il
711             comportamento della funzione GNU getopt_long().
712              
713             =item gnu_getopt
714              
715             Questo è un modo veloce per abilitare C C C
716             C. Con C, la gestione della linea di comando
717             dovrebbe essere pienamente compatibile con la funzione GNU getopt_long().
718              
719             =item require_order
720              
721             Non consente di mescolare gli argomenti della linea di comando con le opzioni.
722             Per default questa opzione è disabilitata a meno che la variabile di ambiente
723             POSIXLY_CORRECT non sia stata settata, nel qualo caso C è
724             abilitata.
725              
726             Si veda anche C, che è l'opposto di C.
727              
728             =item permute
729              
730             Consente di mescolare gli argomenti della linea di comando con le opzioni.
731             Per default questa opzione è abilitata a meno che la variabile di ambiente
732             POSIXLY_CORRECT non sia stata settata, nel qualo caso C è
733             disabilitata.
734             Si noti che C è l'opposto di C.
735              
736             Se C è abilitata, significa che
737              
738             --pippo arg1 --pluto arg2 arg3
739              
740             è equivalente a
741              
742             --pippo --pluto arg1 arg2 arg3
743              
744             Se è stata specificata una routine di callback per gli argomenti, C<@ARGV> sarà
745             sempre vuoto dopo una chiamata (senza errori) a GetOptions() poiché tutte le
746             opzioni sono state processate. L'unica eccezione è quando si usa C<-->:
747              
748             --pippo arg1 --pluto arg2 -- arg3
749              
750             La routine di callback verrà chiamata per arg1 e arg2 quindi GetOptions()
751             terminerà l'elaborazione lasciando "arg3" in C<@ARGV>.
752              
753             Se C è abilitata, l'elaborazione delle opzioni termina quando
754             viene incontrata la prima non-opzione:
755              
756             --pippo arg1 --pluto arg2 arg3
757              
758             è come:
759              
760             --pippo -- arg1 --pluto arg2 arg3
761              
762             Inoltre se C è abilitata, l'elaborazione delle opzioni terminerà
763             alla prima opzione che non venga riconosciuta, o che non sia un'opzione.
764              
765             =item bundling (default: disabilitata)
766              
767             Abilitando questa opzione, si permetteranno i raggruppamenti di opzioni a
768             singolo carattere. Per distinguere i raggruppamenti dalle opzioni con nomi
769             lunghi, queste devono essere precedute da C<--> e i raggruppamenti da C<->.
770              
771             Si noti che, se avete le opzioni C, C and C, e C è
772             abilitato, i possibili argomenti e opzioni sono:
773              
774             argomenti opzioni settate
775             --------------------------------------------
776             -t, --t t
777             -u, --u u
778             -tu, -ut, -tut, -tuu,... t, u
779             --tu, --tutti tutti
780              
781             La cosa sorprendente è che C<--t> imposta l'opzione C (a causa dell'auto
782             completamento) non C.
783              
784             Nota: Disabilitando C si disabilita anche C.
785              
786             =item bundling_override (default: disabilitata)
787              
788             Se C è abilitata, il raggruppamento è consentito come con
789             C ma ora le opzioni con nomi lunghi hanno la precedenza sui
790             raggruppamenti.
791              
792             Nota: Disabilitando C si disabilita anche C.
793              
794             B L'utilizzo dei raggruppamenti può facilmente portare a risultati
795             inaspettati, soprattutto quando vengono mischiati con le opzioni con nomi
796             lunghi. Caveat emptor.
797              
798             =item ignore_case (default: abilitata)
799              
800             Se abilitata, maiuscole e minuscole vengono ignorate nel match delle opzioni
801             con nomi lunghi. Tuttavia, nei raggruppamenti, le opzioni a singolo carattere
802             verranno trattate case-sensitive.
803              
804             Con C, le specifiche di opzione per le opzioni che differiscono
805             soltanto per maiuscole/minuscole, ad esempio C e C, saranno
806             marcate come duplicate.
807              
808             Nota: disabilitando l'opzione C si disabilita anche l'opzione
809             C.
810              
811             =item ignore_case_always (default: disabilitata)
812              
813             Quando si usa il raggruppamento, le opzioni a singolo carattere non verranno
814             trattate case-sensitive.
815              
816             Nota: disabilitando l'opzione C si disabilita anche
817             l'opzione C.
818              
819             =item auto_version (default: disabilitata)
820              
821             Fornisce automaticamente il supporto per l'opzione di B<--version> nel caso in
822             cui l'applicazione non specificasse un handler per questa opzione.
823              
824             Getopt::Long fornirà un messaggio standard di versione che include il nome del
825             programma, la versione (se $main::VERSION è definita) e le versioni di
826             Getopt::Long e Perl. Il messaggio sarà stampato nello standard output e
827             l'esecuzione del programma terminerà.
828              
829             C sarà abilitata se il programma specificasse esplicitamente un
830             numero di versione superiore a 2.32 nei comandi C o C.
831              
832             =item auto_help (default: disabilitata)
833              
834             Fornisce automaticamente il supporto per le opzioni B<--help> e B<-?> nel caso in
835             cui l'applicazione non specificasse un handler per queste opzioni.
836              
837             Getopt::Long fornirà un messaggio di aiuto utilizzando il modulo L.
838             Il messaggio, ricavato dalla sezione POD SYNOPSIS, sarà scritto nello standard
839             output e l'esecuzione del programma terminerà.
840              
841             C sarà abilitata se il programma specificasse esplicitamente un
842             numero di versione superiore a 2.32 nei comandi C o C.
843              
844             =item pass_through (default: disabilitata)
845              
846             Le opzioni sconosciute, ambigue o che hanno un valore non valido sono passate
847             in C<@ARGV> invece che essere marcate come errori. Questo consente di scrivere
848             programmi che processano soltanto parte degli argomenti a linea di comando
849             forniti dall'utente e passano le restanti opzioni ad un altro programma.
850              
851             Se C è abilitata, l'elaborazione delle opzioni terminerà appena
852             sarà incontrata la prima opzione non riconosciuta, o un valore che non sia
853             un'opzione. Tuttavia, l'abilitazione di C potrebbe generare confusione
854             nel risultato dell'elaborazione.
855              
856             Si noti che l'opzione di terminazione (per default C<-->), se presente, sarà
857             anch'essa passata in C<@ARGV>.
858              
859             =item prefix
860              
861             Stringa che inizia le opzioni. Se una stringa costante non è sufficiente,
862             si veda C.
863              
864             =item prefix_pattern
865              
866             Pattern Perl che identifica le stringhe che introducono le opzioni. Il valore di
867             default è C<--|-|\+> a meno che la variabile di ambiente POSIXLY_CORRECT sia
868             stata settata, nel qual caso è C<--|->.
869              
870             =item long_prefix_pattern
871              
872             Pattern Perl che permette di risolvere le ambiguità dei prefissi lunghi e corti.
873             Il valore di default è C<-->.
874              
875             Tipicamente avete bisogno di settare questa opzione soltanto se state usando
876             prefissi non standard e desiderate avere, per qualcuno di questi o per tutti,
877             la stessa semantica di '--' in circostanze normali.
878              
879             Ad esempio, impostando prefix_pattern a C<--|-|\+|\/> e long_prefix_pattern a
880             C<--|\/> si aggiungerebbe lo stile Win32 per la gestione degli argomenti a linea
881             di comando.
882              
883             =item debug (default: disabilitata)
884              
885             Abilita l'output di informazioni di debug.
886              
887             =back
888              
889             =head1 Metodi esportabili
890              
891             =over
892              
893             =item VersionMessage
894              
895             Questa subroutine fornisce un messaggio di versione standard. Il suo argomento
896             può essere:
897              
898             =over 4
899              
900             =item *
901              
902             Una stringa contenente il testo del messaggio da stampare I di stampare
903             il messaggio standard.
904              
905             =item *
906              
907             Un valore numerico corrispondente al valore di uscita desiderato.
908              
909             =item *
910              
911             Un riferimento ad un hash.
912              
913             =back
914              
915             Se viene passato più di un argomento, allora l'intera lista degli argomenti
916             è considerata un hash. Se viene passato un hash (sia come riferimento che come
917             lista), questo dovrebbe contenere uno o più elementi con le seguenti chiavi:
918              
919             =over 4
920              
921             =item C<-message>
922              
923             =item C<-msg>
924              
925             Il testo del messaggio da stampare immediatamente prima di stampare il messaggio
926             di utilizzo del programma.
927              
928             =item C<-exitval>
929              
930             Valore di uscita desiderato da passare alla funzione B.
931             Questo valore deve essere un numero intero, oppure la stringa "NOEXIT" per
932             indicare che il controllo dovrebbe essere semplicemente restituito senza
933             terminare il processo d'invocazione.
934              
935             =item C<-output>
936              
937             Riferimento ad un filehandle o path del file sul quale il messaggio di
938             utilizzo dovrebbe essere scritto. Il valore di default è C<\*STDERR> a meno che
939             il valore di uscita sia minore di 2 (nel qual caso il valore di default è
940             C<\*STDOUT>).
941              
942             =back
943              
944             Non potete legare direttamente questa funzione ad un'opzione, ad esempio:
945              
946             use Getopt::Long qw(VersionMessage);
947             GetOptions("version" => \&VersionMessage);
948              
949             bensì va usato:
950              
951             use Getopt::Long qw(VersionMessage);
952             GetOptions("version" => sub { VersionMessage(-msg => 'Mio messaggio') });
953              
954             =item HelpMessage
955              
956             Questa subroutine produce un messaggio standard di aiuto, ricavato dalla sezione
957             POD SYNOPSIS del programma usando L.
958             La funzione accetta gli stessi argomenti di VersionMessage(). In particolare,
959             non potete legare questa funzione direttamente ad un'opzione, per esempio:
960              
961             GetOptions("help" => \&HelpMessage);
962              
963             Scrivere invece:
964              
965             GetOptions("help" => sub { HelpMessage() });
966              
967             =back
968              
969             =head1 Valori di ritorno ed errori
970              
971             Gli errori di configurazione e gli errori nelle definizioni delle opzioni sono
972             segnalati usando die() e causano la terminazione del programma chiamante a meno
973             che la chiamata a Getopt::Long::GetOptions() sia stata inclusa in C,
974             o die() sia stato intercettato usando C<$SIG{__DIE__}>.
975              
976             GetOptions restituisce un valore vero in caso di successo.
977             Restituisce un valore falso quando la funzione ha rilevato uno o più errori
978             durante l'elaborazione delle opzioni. Questi errori sono segnalati usando warn()
979             e possono essere intercettati usando C<$SIG{__WARN__}>.
980              
981             =head1 Compatibilità con le versioni precedenti
982              
983             Lo sviluppo iniziale di C è iniziato nel 1990, con la versione 4
984             di Perl. Di conseguenza, il suo sviluppo e lo sviluppo di Getopt::Long sono
985             passati attraverso parecchie fasi. Poiché la compatibilità all'indietro è stata
986             sempre estremamente importante, la versione corrente di Getopt::Long ancora
987             supporta molti costrutti che al giorno d'oggi non sono più necessari o al
988             contrario sono indesiderabili.
989             Questa sezione descrive brevemente alcune di queste 'caratteristiche'.
990              
991             =head2 Destinazioni di default
992              
993             Quando nessuna destinazione è specificata per un'opzione, GetOptions memorizzerà
994             il valore risultante in una variabile globale chiamata CI, in cui
995             I è il nome primario di questa opzione. Quando un progamma viene eseguito
996             con C (pratica consigliata), queste variabili devono essere
997             dichiarate con our() o C.
998              
999             our $opt_lunghezza = 0;
1000             GetOptions ('lunghezza=i'); # memorizzerà in $opt_lunghezza
1001              
1002             Per rendere una variabile utilizzabile dal Perl, i caratteri che non fanno parte
1003             della sintassi delle variabili, vengono sostituiti con il carattere undescore
1004             (C<_>). Per esempio, C<--fpp-struct-return> imposterà la variabile
1005             C<$opt_fpp_struct_return>. Si noti che questa variabile sta nel namespace del
1006             programma chiamante, non necessariamente C
. Per esempio la seguente
1007             istruzione:
1008              
1009             GetOptions ("size=i", "sizes=i@");
1010              
1011             con la linea di comando "-size 10 -sizes 24 -sizes 48", è equivalente agli
1012             assegnamenti:
1013              
1014             $opt_size = 10;
1015             @opt_sizes = (24, 48);
1016              
1017             =head2 Caratteri di inizio opzioni alternativi
1018              
1019             Una stringa di caratteri alternativi per introdurre le opzioni può
1020             essere passata come primo argomento (o come argomento subito dopo un riferimento
1021             ad un hash quando questo è il primo argomento).
1022              
1023             my $len = 0;
1024             GetOptions ('/', 'length=i' => $len);
1025              
1026             Ora la linea di comando può essere simile alla seguente:
1027              
1028             /length 24 -- arg
1029              
1030             Si noti che per terminare l'elaborazione delle opzioni è ancora necessario un
1031             doppio trattino C<-->.
1032              
1033             GetOptions() non interpreterà C<< "<>" >> come caratteri di inizio opzione
1034             se l'argomento successivo è un riferimento.
1035             Per forzare C<< "<" >> e C<< ">" >> come caratteri di inizio opzione, usare
1036             C<< "><" >>. Confusi? Bene, ad ogni modo B
1037             opzione è vivamente sconsigliato>.
1038              
1039             =head2 Variabili di configurazione
1040              
1041             Le precedenti versioni di Getopt::Long usavano le variabili per la configurazione.
1042             Anche se il settaggio di queste variabili ancora funziona, è vivamente
1043             consigliato di usare la funzione C che è stata introdotta nella
1044             versione 2.17. Inoltre, è molto più facile.
1045              
1046             =head1 Risoluzione dei problemi
1047              
1048             =head2 GetOption non restituisce un valore falso quando un'opzione non viene fornita
1049              
1050             Ecco perché esse sono chiamate 'opzioni'.
1051              
1052             =head2 GetOptions non splitta correttamente la linea di comando
1053              
1054             La linea di comando non viene splittata da GetOptions, ma dall'interprete della
1055             linea di comando (CLI). In Unix, questo è rappresentato dalla shell. In
1056             Windows, è COMMAND.COM o CMD.EXE. Altri sistemi operativi hanno altri CLI.
1057              
1058             E' importante sapere che questi interpreti della linea di comando possono
1059             comportarsi in maniera differente quando la linea di comando contiene caratteri
1060             speciali, in particolare virgolette o backslash. Ad esempio, con le shell Unix,
1061             potete usare virgolette semplici (C<'>) o doppie (C<">) per raggruppare
1062             insieme le parole. Le seguenti espressioni in Unix sono equivalenti:
1063              
1064             "due parole"
1065             'due parole'
1066             due\ parole
1067              
1068             In caso di dubbio, mettete la seguente istruzione all'inizio del vostro
1069             programma Perl:
1070              
1071             print STDERR (join("|",@ARGV),"\n");
1072              
1073             per verificare come la vostra CLI passi gli argomenti al programma.
1074              
1075             =head2 "Undefined subroutine &main::GetOptions called"
1076              
1077             State utilizzando Windows e avete scritto:
1078              
1079             use GetOpt::Long;
1080              
1081             (notate la 'O' maiuscola)?
1082              
1083             =head2 Come posso mettere l'opzione "-?" in Getopt::Long?
1084              
1085             Potete ottenere ciò solamente utilizzando un alias e Getopy::Long a partire
1086             almeno dalla versione 2.13
1087              
1088             use Getopt::Long;
1089             GetOptions ("help|?"); # -help e -? imposteranno entrambi $opt_help
1090              
1091             =head1 AUTORE
1092              
1093             Johan Vromans
1094              
1095             =head1 COPYRIGHT E DISCLAIMER
1096              
1097             Questo programma è Copyright 1990,2005 di Johan Vromans.
1098              
1099             Questo programma è software libero; esso può essere distribuito secondo gli
1100             stessi termini della Licenza Artistica Perl o della GNU General Public License
1101             come pubblicata dalla Free Software Foundation sia nella versione 2 della
1102             License, che (a vostra scelta) nelle versioni successive.
1103              
1104             Questo programma viene distribuito nella speranza che sia utile, ma SENZA
1105             ALCUNA GARANZIA; senza la garanzia implicita di COMMERCIABILITÀ o di
1106             IDONEITÀ PER UNO SCOPO PRECISO. Si veda la GNU General Public License per
1107             maggiori informazioni.
1108              
1109             Se non disponete di una copia della GNU General Public License scrivete alla
1110             Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
1111              
1112             =head1 TRADUZIONE
1113              
1114             =head2 Versione
1115              
1116             La versione originale su cui si basa questa traduzione E ottenibile
1117             con:
1118              
1119             perl -MPOD2::IT::Getopt::Long -e 'print $POD2::IT::Getopt::Long::VERSION_ORIG'
1120              
1121             Per maggiori informazioni sul progetto di traduzione
1122             in italiano si veda http://pod2it.sourceforge.net/ .
1123              
1124             =head2 Traduttore
1125              
1126             Traduzione a cura di Enrico Sorcinelli.
1127              
1128             =head2 Revisore
1129              
1130             Revisione non ancora effettuata (ogni revisore è ben accetto! :-)).
1131              
1132             =cut