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