Spusteni prikazu systemu a predani dat


Funkce system()

Funkce system vykona prikaz uvedeny v zavorkach. Prikaz bude zpracovan pomoci shellu /bin/sh, v unixu se pro kazdy shell zaklada vlastni proces. Parametrem muze byt cokoli, co je mozne zadat shellu /bin/sh ke zpracovani. Priklad:
system("ls");
system("ls > x.txt") && die "nelze vytvorit soubor x.txt";
$adr = system("ls > x.txt");

Prvni prikaz vypise na standardni vystup obsah adresare,
druhy prikaz zapise obsah adresare do souboru x.txt,
treti prikaz zapise obsah adresare do souboru x.txt a do promenne $adr ulozi vysledkovy kod prikazu (0 pokud prikaz probehl uspesne).
Vsimnete si, ze standardni vystup zdedi proces zpracovavajici prikaz ls z perloveho scriptu.

Vice prikazu v parametru se oddeli strednikem nebo znakem pro konec radku. Napr:

system("ls > x.txt; cat x.txt; who");
Funkce system() muze mit take vice parametru , ktere se uvani oddelene carkou. Prvni parametr je interpretovan jako prikaz a tedy spusten. Dalsi parametry jsou interpretovany jako parametry spusteneho prikazu. Priklad:
system "cat","x.txt","a.txt";
Provede prikaz cat, kteremu jako parametry preda soubor x.txt a a.txt.


Zpetne apostrofy

Dalsi zpusob jak spustit proces k vykonani nejakeho prikazu je umistit prikazovou radku shellu /bin/sh do zpetnych apostrofu. Priklad:
$datum = "dnes je ".`date`;
$uz = "seznam uzivatelu\n".`who`;
print $datum;
print $uz;
Toto spusteni prikazu vraci hodnotu ve tvaru retezce, ktery je potreba ulozit do promenne, neposila nic na standardni vystup. Pouzijeme-li toto volani v kontextu pole (napr. spolu s funkci foreach) vraci viceradkovy vysledek prikazu jako seznam retezcu (radek). Priklad:
foreach $rad (`who`) {
$rad =~ /(\S+)\s+(\S+)\s+(.*)/;
print "kdo $1 kde $2 kdy $3\n";
} 


Spusteni prikazu pomoci log. jmena

Funkce open je bezne pouzivana k otevreni vstupniho nebo vystupniho souboru. Pokud jmeno souboru zacina znakem "|", je jmeno souboru interpretovano jako prikaz operacniho systemu, kteremu ma byt vstup predan. Pokud jmeno konci znakem "|", je jmeno souboru interpretovano jako prikaz, ktery predava vstup.

Priklad:
Obsah adresare muzeme predat k dalsimu zpracovani prikazem:

open(ADR,"ls |") || die "chyba\n";

kde: ls je prikaz unixu pro vypis adresare, prikaz die vypise na standardni vystup uvedenou zpravu, pokud neni mozne provest open.

E-mail muzeme ze scriptu vyhodne poslat napr.

open(ZPRAVA,"| mailx Zprava $adr);

kde: mailx je unixovy program pro e-mail, Zprava je subject mailu a $adr je promenna obsahujici adresata.


Cviceni


Priklad c.7:
Ulozte prvni vety ze vsech textovych souboru, jejichz jmeno zacina pismenem a do souboru prvety.txt. Vetu opiste i na obrazovku. Pokud existuje soubor, jehoz jmeno zacina na a, ktery neni textovy, vypiste o tom zpravu na obrazovku. Jedno z reseni prikladu.


Dalsi kapitola | Predchozi kapitola | Obsah