LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Perl (142) - Způsoby konfigurování

Perl CPAN obsahuje několik modulů pro práci s konfiguračními soubory. Na tuto otázku se ovšem podíváme ještě o něco šířeji, neboť konfigurovat lze i jinými způsoby.

3.10.2011 00:00 | Jiří Václavík | Články autora | přečteno 3442×

Každý větší a i řada menších programů vyžaduje konfigurovatelnost. Pro běh v různých podmínkách bude vyžadovat různě nastavené implicitní hodnoty. Program by měl být v tomto směru dostatečně flexibilní, abychom, pokud možno, nikdy nemuseli pro změnu výchozího nastavení zasahovat do zdrojového kódu algoritmu.

Konfigurace pomocí proměnných ve zdrojovém kódu

První způsob konfigurace, který nás většinou napadne, je umístění speciálního deklaračního bloku do zdrojového kódu, případně import souboru s konfigurací pomocí require v bloku BEGIN. V něm si uživatel modulu výchozí hodnoty nastaví.

Program pak může začínat následovně.

#!/usr/bin/perl
use strict;
use warnings;

### NASTAVENÍ - ZAČÁTEK### 

my $login = "vase_jmeno";
my $heslo = "vase_heslo";
my $host  = "localhost";

### NASTAVENÍ - KONEC ###

Zdánlivou výhodou je jednoduchost. Tento postup lze v odůvodněných případech použít v pomocných programech pro vlastní potřebu, ale už vůbec není vhodný pro jakoukoliv masovou distribuci.

Nevýhodou je zejména zasahování uživatele do zdrojového kódu. Rozhraní a zdrojový kód by totiž měly být striktně oddělené, což zde vůbec není pravda. Na uživatele je také kladena nutnost alespoň základní znalosti syntaxe Perlu, což je nárok, který by tu být vůbec nemusel. V neposlední řadě při hromadném použití je třeba upravovat každou instanci zvlášť, což na přehlednosti nepřidá.

Tato metoda se dobře hodí prakticky jen pro vnitřní potřebu autora kódu, nikoliv pro uživatelské nastavení. Například se lze často setkat s něčím jako je

my $DEBUG = 0;

YAML soubor

Výrazně lepší je import datové struktury ve formátu YAML ze speciálního souboru. YAML slouží k uchovávání proměnných napříč různými skriptovacími jazyky. Perl jej podporuje také. Předtím, než začnete psát konfigurační soubory v YAML formátu, čtěte dále. Dostaneme se k modulu Config::Auto, který umí číst mimo jiné YAML konfiguraci.

Konfigurace pomocí voleb příkazového řádku

Podstatně čistější metoda pro konfiguraci je také umístění dat do argumentů příkazového řádku. Pro každé volání tak volíme parametry zvlášť.

$ ./program.pl localhost pepa heslo

Lepší je však nechtít heslo jako parametr, ale říci si o něj interaktivně (například pomocí modulu Term::ReadPassword). Interaktivita se nám však často nemusí hodit a pak nezbude než použít nějaký konfigurační soubor.

Volba -s příkazu perl může sama rozpoznávat přepínače typu pravda/nepravda. Můžeme též použít krátké přepínače

$ ./program.pl -h localhost -u pepa

nebo dlouhé přepínače.

$ ./program.pl --host localhost --login pepa

Tímto tématem jsme se již zabývali a proto v případě zájmu následujte uvedené odkazy.

Interaktivní konfigurace

Již jsme naznačili též možnost postupně se na začátku běhu programu zeptat uživatele na všechny nutné údaje. To často bývá zdlouhavá činnost a nelze to dělat hromadně. Je to nevhodné i v případech, kdy uživatel často zadává stejné hodnoty (leda že by byla automaticky nabízena očekávaná hodnota přectená například z konfiguračního souboru).

Nezřídka je program dokonce volán jiným programem a tam by bylo zadávání dat na standardní výstup komplikované. V některých případech se však interaktivní zadávání hodí.

Konfigurace pomocí proměnných prostředí

Také jsme se věnovali přístupu k proměnným prostředí.

Jen poznamenejme, jak lze proměnné prostředí nastavovat zvenku. Pro jednorázové použití proměnné prostředí můžeme její hodnotu zamontovat do příkazu.

$ HOST=localhost LOGIN=pepa ./program.pl

Nyní budeme mít uvnitř programu v $ENV{HOST} a $ENV{LOGIN} nastavené hodnoty.

Chceme-li toto nastavení zachovat pro zbytek sezení shellu, použijeme příkaz export v Bashi, případně v jiném shellu set, setenv apod.

$ export HOST=localhost
$ export LOGIN=pepa
$ ./program.pl

Konfigurační soubory

Na CPANu máme k dispozici několik modulů pro čtení konfiguračních souborů. Jde o nejsofistikovanější volbu nejen pro rozsáhlé aplikace s velkým množstvím nastavitelných hodnot.

Nejjednodušší konfigurační soubory

Pro jednoduché konfigurační soubory nám plně postačí modul ConfigReader::Simple. Tento modul čte konfigurační soubor, ve kterém je na každém řádku pár klíč-hodnota. Klíč a hodnota mohou být oděleny prvním rovnítkem, mezerami nebo rovnítkem a mezerami okolo. Takto mohou vypadat řádky v konfiguračním souboru.

#komentář
klic1 hodnota
klic2 = hodnota
klic3    hodnota
klic4    hod no ta
klic5  = hod no ta
klic6    "hod no ta"
klic7    'hod no ta'

Nevýhodou je omezení na skalární hodnoty. Použití je ale zato intuitivní. Nejprve si předchozí konfigurační soubor (nebo jakýkoliv jiný) uložme do souboru mujprogramrc. Poté ho načteme a rozparsujeme pomocí ConfigReader::Simple.

use ConfigReader::Simple;

$config = ConfigReader::Simple->new("mujprogramrc");

Získali jsme objekt $config, z kterého získáme metodou get hodnotu libovolného klíče. Takto vytiskneme jednu z hodnot.

print $config->get("klic4");

Konfigurační soubory lze i editovat. Přidejme si klíč login s hodnotou pepa a uložme nový konfigurační soubor do novyrc.

$config->set("login", "pepa");
$config->save("novyrc");

Dodejme, že ConfigReader::Simple umí zpracovávat i více konfiguračních souborů zároveň.

$config = ConfigReader::Simple->new_multiple(Files => ["rc1", "rc2"]);

Automatické zjišťování formátu konfigurace

Modul Config::Auto umí sám od sebe rozpoznat jméno konfiguračního souboru i jeho formát souboru. Lepší však často bývá zadat alespoň formát ručně, neboť rozpoznávání funguje pouze heuristicky. Rozpoznávání jména konfiguračního souboru funguje na základě jména programu a je blíže popsáno v manuálové stránce.

Seznam aktuálně podporovaných formátů získáme voláním metody Config::Auto->formats.

irssi bind ini space perl colon yaml xml equal list

Pojďme však nyní vyzkoušet parsovat nějaké soubory. Co třeba /etc/resolv.conf? Poradí si Config::Auto?

use Config::Auto;
use Data::Dumper;

$config = Config::Auto::parse("/etc/resolv.conf");

print Dumper $config;

Ano, poradí. Výsledkem je následující datová struktura.

$VAR1 = {
          'search' => [
                        'vashost.cz',
                        'linux'
                      ],
          'nameserver' => '192.168.15.94'
        };

Při parsování pomocí Config::Auto stačí vynaložit minimální úsilí, modul se sám o všechno postará.

Ještě se podívejme na to, jak zadat přesně formát konfiguračního souboru.

$config = Config::Auto::parse("config.xml", format => "xml");

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

22.8.2014 7:15 /MaReK Olšavský
Google chce Chromebooky (různých výrobců) prosadit i v enterprise sféře, proto začal spolupracovat s Citrixem. Citrix, jakožto leader terminálových řešení, může Google pomoci prosadit se v segmentu, který je více výdělečný, než retailový trh.
Přidat komentář

22.8.2014 7:15 /MaReK Olšavský
Canonical spojil síly s The Khronos Group, aby pomohl s vývojem pro nástupce X Window serveru. Vývoj OpenGL implementace tím získává cenné posily.
Přidat komentář

21.8.2014 7:09 /MaReK Olšavský
Mezi významné uživatele GNU/Linuxu patří i Evropská Vesmírná Agentura (ESA), která používá 390 serverů se SLES, ale openSUSE je zde „doma“ už delší dobu.
Přidat komentář

20.8.2014 7:02 /MaReK Olšavský
Lehký úvod pro nasazení Dockeru přinesl web Opensource.com. Autor vysvětlil nejen první kroky v nasazení Dockeru, ale i filosofii kontejnerů.
Přidat komentář

20.8.2014 7:02 /MaReK Olšavský
AMD se snaží konkurovat Intelu i na poli SSD disků, ohlásila Radeon R7 Series SSD (oznaření Radeon může mást, tentokrát nejde o GPU). SSD obsahuje MLC NAND čipy Toshiba A19, s kontrolerem Barefoot 3 M00 a základní verze (120 GB) se prodává za US$ 100.
Přidat komentář

19.8.2014 16:39 /Miloslav Ponkrác

C++ schválilo standard C++14.. Ještě je třeba dokončit editační práce na finální verzi dokumentů standardu.

Takže C++ bude mít velmi brzy 3 základní standardy: ISO C++98/03, ISO C++11 a ISO C++14. Všechny novější standardy jsou vzájemně výborně zpětně kompatibilní se staršími (až ne velice nepodstatné drobnosti), takže C++ programátor je může vnímat pouze jako vzájemné rozšiřování.


Přidat komentář

19.8.2014 7:53 /MaReK Olšavský
Rusko to evidentně myslí s odklonem od velkých dodavatelů software vážně. Přechod začalo ministerstvo zdravotnictví, jež nahrazuje produkty Microsoftu a Oracle řešeními na bázi GNU/Linuxu a PostgreSQL,
Přidat komentář

19.8.2014 7:53 /MaReK Olšavský
Nostalgie za původním vzhledem a chováním desktopu GNOME, které bylo uživatelsky mnohem lepší, vedla k vytvoření nového desktopu MATE. Ubuntu, jakožto nejpopulárnější distribuce a původně i „vlajková loď“ GNOME, má i fork s MATE, jenž se stane oficiální větví, čímž se zařadí po bok Kubuntu, Xubuntu a Lubuntu.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

19.8.2014 11:02 / Le-Ze
Python s Lighttpd

15.8.2014 3:12 / Miloslav Ponkrác
Re: Kdyby autoři BeoSu nebyli blbci

15.8.2014 3:01 / Miloslav Ponkrác
Re: WIFI ůprava paketů připojených zařízení

15.8.2014 2:56 / Miloslav Ponkrác
Re: Linus tedy střílí do unixové architektury

13.8.2014 18:58 / Aleš Hakl
Re: Linus tedy střílí do unixové architektury

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2014) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze | zákony online