Re: Prosim o radu v Perlu

From: Daniel (ramoth@seznam.cz)
Date: 06. 12. 2003, 22:36 CET


> ......
> Nevedel by prosim vas nekdo jak a jesli vubec by se to dalo zjednodusit?
> Vsiml jsem si, ze je tady par programatorskych guru. :-)
> Diky za pripadnou pomoc, Marek K.

Nevim, jestli jsem guru, ale mne se to zase az tak moc "divoke"
nezda - je to, pravda, hrozne skolacke a je to proste klasicky
Perl beginner's code a docela jasne z toho kouka skodliva ;-))
pascalsko-basicka vychova. Ale konec koncu, i takhle se da v
Perlu "programovat", pokud clovek zna jenom ty nejzakladnejsi
a vicemene vsude universalni konstrukce. Bud tedy rad, zes to
dal dohromady aspon takhle a ze to plni svuj ucel. :-)

Ale chces-li to "trochu" zjednodusit, tak tech 17 radku tveho
"programu" lze v Perlu jednoduse smrsknout na radek JEDINY a to
dokonce vice zpusoby (jak tomu v Perlu byva zvykem):

s pouzitim ?
foreach $line(@pole){print(VYSTUP $line=~/#B#/..$line=~/#E#/?$line:'');}

s modifikatorem
foreach $line(@pole){print(VYSTUP $line) if $line=~/#B#/..$line=~/#E#/;}

klasicky
foreach $line(@pole){if($line=~/#B#/..$line=~/#E#/){print(VYSTUP $line;}}

Ten radek resi cely tvuj "program" na vypis vybranych radku z pole.
Kouzlo je v tom, ze proste pouzijes range operator '..'. Ten ma ve
skalarnim kontextu bistabilni chovani a pamatuje si svoji posledni
hodnotu. Zacne na false, ciha na levy operand a je-li true, prepne
se IHNED do true a dale ciha zase na pravy operand. Bude-li true,
prepne se PO teto operaci do false, atd... Take to tvoje pouzivani
index() je zde zcela zbytecne. Pozice flagu v radku te nezajima,
takze ti na to staci uplne primitivni regex.

Jojo, Perl je napul programovaci jazyk a napul magie... :-)))

Daniel. 


____________________________________________________________
NOKIA 3100 jiľ od 2977 Kč. Dost dobrý důvod poslat svůj starý telefon do háje! www.oskar.cz
http://ad2.seznam.cz/redir.cgi?instance=64995%26url=http://www.oskarmobil.cz/handsets/index.php



This archive was generated by hypermail 2.1.3 : 06. 12. 2003, 22:36 CET