|
|
|||||||||||||||
|
|
|||||||||||||||
| 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.
|
Příspívat do diskuze mohou pouze registrovaní uživatelé. | |
21.5.2013 7:05 /MaReK Olšavský
Vydání nástupce kdysi velmi populární distribuce GNU/Linuxu, Mandrake/Mandrivy, Mageia již nebude dále odkládáno, s 2 měsíčním zpožděním vyšla Mageia 3. Z novinek vybíráme: KDE 4.10.2, GNOME 3.6, LibreOffice 4.03, nebo Steam pro Linux. Mageia patří mezi distribuce, které lze doporučit méně zkuženým uživatelům.
Přidat komentář
21.5.2013 7:05 /MaReK Olšavský
Chytré telefony s operačním systémem Sailfish OS (který vytváří společnost Jolla, jež vznikla z bývalých vývojářů Maema Nokie) se blíží uvedení na trh, předobjednávka s dodáním na konci roku 2013 a kompatibilita s Androidími aplikacemi ukazují na blízkost cíle. Rozhovor s Marcem Dillonem odhaluje mnohé z pozadí vývoje. Není bez zajímavosti, že první aplikace byla zveřejněna pouhých 29 minut po vydání SDK.
Přidat komentář
21.5.2013 7:05 /MaReK Olšavský
Z koupě populární služby Tumblr firmou Yahoo za 1,1 mld. US$ nemalou měrou těží svobodný Wordpress, jemuž narostl počet importovaných blogů z Tumblr přibližně 150×.
Přidat komentář
21.5.2013 7:05 /MaReK Olšavský
Ač se to mnohým může zdát neuvěřitelné, COBOL stále patří mezi živé jazyky. Firma IBM rozšířila jeho schopnosti o podporu XML a Javy 7, se současným nárůstem výkonu o 15—20 %.
Přidat komentář
20.5.2013 6:53 /MaReK Olšavský
Vývojářský tým NetBSD vydal verzi 6.1 operačního systému, jenž je portován pro drtivou většinu používaných platforem. Jelikož se jedná o upgrade stávající řady, přináší nová verze převážně jen opravy. V duchu oprav vydání vyšla i verze 6.0.2.
Přidat komentář
20.5.2013 6:53 /MaReK Olšavský
Zajímavost: Většina uživatelů používá některého ze čtveřice správců oken/desktopů (KDE, XFce, GNOME, LXDE), ale nabídka je mnohem širší a slideshow méně známých wm ukazuje alternativy, jež používá málokdo. Nepochopitelně je zařazen i E17.
Přidat komentář
17.5.2013 7:15 /MaReK Olšavský
Blender, jeden z nejvíce známých F/L/OSS programů, se postupně etabluje v 3D tisku, díky malému 3D Printing Toolboxu. Dostupnost toolboxu, pro oblíbený nástroj, by mohla pomoci v rozšíření již dostupné technologie, které se predikuje multimiliardový trh.
Přidat komentář
17.5.2013 7:15 /MaReK Olšavský
Německá společnost SerNet připravila balíky se Sambou 4 pro běžně používané distribuce. Cesty k repozitářům budou bezplatně zaslány po registraci emailem.
Přidat komentář
18.5.2013 17:55 /
Martin Kumst
Re: zaheslování bash scriptu nebo složky
18.5.2013 7:44 /
---
Re: Prosím o pomoc či radu
15.5.2013 19:21 /
Filip Vaněček
Cesty k souborům při používání coolurl
13.5.2013 6:50 /
Radim Kolář
Zabbix
8.5.2013 6:07 /
MaReK Olšavský
Web Upd8