Perl, Operátory (22.díl)

Napsal O webu (») 20. 4. 2008 v kategorii Programování, přečteno: 661×
obrazky/logo_perl.jpg

Operátor <>

Tento operátor lze použít ve dvou variantách v závislosti na argumentech. Pokud mu předáme ovladač nebo jednoduchou skalární hodnotu (která obsahuje buď jméno ovladače, typeglob se jménem ovladače, nebo odkaz na typeglob se jménem ovladače ve tvaru $jmeno), ve skalárním kontextu přečte z ovladače, jehož jméno je uvedeno uvnitř špičatých závorek, další řádek a tento řádek vrátí (i s případným znakem konce řádku). V případě, že se nacházíme na konci souboru či v případě chyby vrátí nedefinovanou hodnotu. V seznamovém kontextu jsou vráceny všechny řádku od aktuální pozice v souboru až do konce souboru tak, že každý prvek seznamu odpovídá jednomu načtenému řádku za souboru.


Kde končí řádek (přesněji řečeno vstupní záznam) je definováno obsahem pro¬měnné
$ / ($INPUT_RECORD_SEPARATOR). Implicitně je tato proměnná nastavena na hodnotu , ale je možné do ní přiřadit libovolný řetězec. Máme-li například odstavce v textu odděleny jedním prázdným řádkem, a chceme-li, aby byl najednou přečten celý odstavec, nastavíme tuto proměnnou na řetězec .


Jakýkoliv složitější výraz uvnitř operátoru je brán jako vzor pro jméno souboru, který se předá funkci glob. Návratová hodnota této funkce je tvořena seznamem jmen souboru odpovídajících zadanému vzoru, a následně je vrácena operátorem <>. Tato činnost se provádí i v případě, že se uvnitř špičatých závorek nachází prvek pole nebo hashe (což jsou také skalární hodnoty), ale i proměnná ve tvaru ${jméno}. To je také způsob, jak vynutit tento způsob zpracování výrazu uvnitř <> (tzn. jak získat jména souboru).



Print “Soubory s příponou doc:\n”;

Print “ $_\n“ for <*.doc>;




Zvláštní chování má operátor <> v případě, že mu není zadán argument. V tomto případě operátor prochází soubory, jejichž jména jsou obsažena v poli @ARGV. Toto pole obsahuje seznam argumentu zadaných skriptu na příkazové řádce. Je-li prázdné, pracuje se se souborem -. Tento speciální soubor reprezentuje standardní vstup v případě použití pro čtení, nebo standardní výstup při použití pro zápis.


Soubory jsou zpracovány tak, jako by se jednalo o jeden soubor. Proměnná $. obsahující číslo aktuálně zpracovávané řádky se po otevření nového souboru nevy¬nuluje (soubory totiž nejsou explicitně uzavírány).



// Spoštěno s argumenty ’data1’, ’data2’

While ($radek = <>) {

Print “$.: $radek“;

}

// Vytiskne:

1: data1 – radek1
2: data1 – radek2
3: data2 – radek1
4: data2 – radek2
5: data2 – radek3




Nejsou-li na příkazové řídce žádné argumenty, pracuje se se souborem -, tzn. zpracovává se standardní vstup.



While ($radek = <>) {

Print uc $radek;

}

//Vytiskne načtené řádky velkými písmeny




A to by bylo pro dnešek všechno. V dalším díle se podíváme na operátor šipka, operátor autoinkrementu a autodeinkrementu. V případě jakýchkoliv dotazů mě kontaktujte na email: habrman@banan.cz.


Autor: Robert Habrman
Štítky: Perl
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
Článek ještě nebyl okomentován.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel dvanáct a jedenáct