|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Hodnota | Význam |
| s | řetězec |
| f | desetinné číslo |
| i | klasické celé číslo |
| o | celé číslo; je zde navíc podpora dvojkové (0b), osmičkové (0), šestnáctkové (0x) soustavy a znamének |
Uveďme si krátký kód, vyžadující celočíselnou hodnotu přepínače, pokud je tento přepínač uveden.
use Getopt::Long;
GetOptions("size=i" => \$size);
print "size = $size\n";
Jestliže volbu nezadáme, nebude program protestovat. Varování ale vypíše tehdy, pokud zadáme volbu bez hodnoty.
$ ./getopt.pl --size=11 size = 11 $ ./getopt.pl --size Option size requires an argument size = $ ./getopt.pl size = $
Je-li použit znak :, lze za něj napsat i hodnotu, která bude dané proměnné přiřazena v případě, že bude na příkazovém řádku zadán poze přepínač bez hodnoty. Přepínači --size nastavíme jako implicitní hodnotu 12.
use Getopt::Long;
GetOptions("size:12" => \$size);
print "size = $size\n";
Pokud v GetOptions zaměníme odkaz na skalár za odkaz na pole, bude vloženo tolik hodnot, kolik jich bylo zadáno.
use Getopt::Long;
GetOptions("file=s" => \@file);
print "file = @file\n";
Při zadávání více hodnot je nutné volbu opakovat tolikrát, kolik hodnot bude.
$ ./getopt.pl --file=create.sql --file=insert.sql file = create.sql insert.sql $
Funkci GetOptions lze předat dokonce i hash. Poté vyžaduje páry hodnot.
use Getopt::Long;
GetOptions("www=s" => \%www);
print "www = ";
print $_."=".$www{"$_"}." " for keys %www;
print "\n";
V takovém případě se volá program tímto způsobem.
$ ./getopt.pl -www www.linuxsoft.cz="Linux Software" --www www.google.com=Google www = www.google.com=Google www.linuxsoft.cz=Linux Software $
Podobně jako u jednoznakových přepínačů lze určit hash, do kterého se mají volby souhrnně ukládat. Formát takového hashe je pak $hash{"volba"} = hodnota.
Potom se ale poněkud mění fungování funkce GetOptions. Jako první parametr je nutno zadat odkaz na hash a dalšími parametry jsou jednotlivé volby.
use Getopt::Long;
GetOptions("\%volby, "height=f", "width=f", "length=f");
print $_."=".$volby{$_}."\n" for keys %volby;
GetOptions umožňuje výskyt synonymních voleb. To znamená, že lze nastavit 1 proměnnou pro více voleb. Takové volby pak mají totožný význam.
K tomu je třeba vepsat do GetOptions obě možnosti a oddělit je znakem |.
use Getopt::Long;
GetOptions("paste|insert|ins=s" => \$insert);
print "insert = $insert\n";
Nyní bude proměnná $insert nastavena ve všech těchto případech volání.
$ ./getopt.pl --insert=zvuk.ogg $ ./getopt.pl --paste=zvuk.ogg $ ./getopt.pl --ins=zvuk.ogg
Stejně jako odkaz na proměnnou je možné předávat odkaz na podprogram. V takovém případě se žádná proměnná nenastavuje, ale zato se v případě uvedení přepínače provede daný podprogram.
use Getopt::Long;
GetOptions("pozdrav" => sub {print "Ahoj!\n";});
Getopt::Long umožňuje zpracovávání dlouhých i krátkých přepínačů najednou. A to dokonce tak, aby bylo možné krátké volby seskupovat.
Slouží k tomu funkce Configure, která se stará o nastaveví chování modulu. Pokud jí jako parametr předáme hodnotu bundling (svazkování), bude brát přepínače s jednou pomlčkou vždy jako jednoznakové a se 2 pomlčkami jako dlouhé.
use Getopt::Long qw(Configure GetOptions);
Configure("handling");
GetOptions("decode" => \$decode, "x" => \$x, "y" => \$y, "z" => \$z);
print "x: $x\n";
print "y: $y\n";
print "z: $z\n";
print "decode: $decode\n";
Nyní se budou zadáním voleb -xyz --decode hledat přepínače -x, -y, -z a --decode. Pokud bude ale zadáno -xyz -decode budou považovány všechny všechny volby za jednoznakové: -x, -y, -z, -d, -e, -c, -o, -d a -e. To ve většině případů nemáme v úmyslu. Proto existuje pro funkci Configure ještě hodnota handling_override, která umí taková zadání rozpoznat. Potom bude fungovat i zápis -xyz -decode podle očekávání.
Jako základ o Getopt::Long by měl tento díl seriálu stačit. Pokud vás však informace v něm stále neuspokojily, pak můžete nahlédnout do dokumentace.
|
|
||||
| KOMENTARZE | ||||
|
Tylko zarejestrowani użytkownicy mogą dopisywać komentarze.
|
||||
| 1. |
Pacman linux Download: 5529x |
| 2. |
FreeBSD Download: 9747x |
| 3. |
PCLinuxOS-2010 Download: 9236x |
| 4. |
alcolix Download: 11711x |
| 5. |
Onebase Linux Download: 10399x |
| 6. |
Novell Linux Desktop Download: 0x |
| 7. |
KateOS Download: 6901x |
| 1. |
xinetd Download: 3031x |
| 2. |
RDGS Download: 937x |
| 3. |
spkg Download: 5938x |
| 4. |
LinPacker Download: 11124x |
| 5. |
VFU File Manager Download: 3748x |
| 6. |
LeftHand Mała Księgowość Download: 7979x |
| 7. |
MISU pyFotoResize Download: 3459x |
| 8. |
Lefthand CRM Download: 4243x |
| 9. |
MetadataExtractor Download: 0x |
| 10. |
RCP100 Download: 3756x |
| 11. |
Predaj softveru Download: 0x |
| 12. |
MSH Free Autoresponder Download: 0x |
linuxsoft.cz | Design:
www.megadesign.cz