abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

    dnes 16:55 | Nová verze

    Projekt openSUSE dnes, 3. listopadu 2026, oficiálně vydal openSUSE Leap 16.1, novou verzi své stabilní linuxové distribuce. Novinkou je také Immutable Mode, který nahrazuje dosavadní samostatnou distribuci openSUSE Leap Micro. Podrobnosti o novém vydání najdete v oficiálním oznámení nebo v českém překladu oznámení. Instalační obrazy jsou již dostupné na get.opensuse.org. Vydání společně oslavíme v pátek ve virtuálním baru a na … více »

    lkocman | Komentářů: 1
    dnes 16:00 | Nová verze

    Bylo oznámeno vydání Fedora Linuxu 45. Ve finální verzi vychází šest oficiálních edic: Fedora Workstation a Fedora KDE Plasma Desktop pro desktopové, Fedora Server pro serverové, Fedora Cloud pro cloudové nasazení, Fedora CoreOS pro ty, kteří preferují neměnné systémy a Fedora IoT pro internet věcí. Vedle nich jsou k dispozici také další atomické desktopy, spiny a laby. Podrobný přehled novinek v samostatných článcích na stránkách

    … více »
    Ladislav Hagara | Komentářů: 0
    dnes 15:44 | Zajímavý článek

    Vědci z MIT CSAIL představili koncept 'weight-space programming' a názorně předvedli, že pokročilé jazykové modely SI dokážou přímo číst a upravovat váhy neuronových sítí. Studie ukazuje, že modely nejen dokážou identifikovat účel sítí z pouhého nahlédnutí do jejich číselných vah, ale mohou i cíleně opravovat chyby a nedostatky, například GPT-6 Astra se změnou pouhých 0,016% vah open-weight modelu Qwen3.5-0.8B podařilo odstranit

    … více »
    👻 | Komentářů: 3
    dnes 14:00 | Komunita

    Organizátoři komunitního setkání nejen českých a slovenských správců sítí CSNOG 2027, které se uskuteční 20. a 21. ledna na půdě zlínské univerzity Tomáše Bati, oznámili prodloužení termínu pro zasílání abstraktů do programu akce. Zájemci se mohou hlásit prostřednictvím webu setkání do úterý 10. listopadu. Programová komise uvítá příspěvky věnované nejen správě sítí, ale také legislativě a regulaci nebo síťařským aktivitám studentů a pedagogů.

    VSladek | Komentářů: 1
    dnes 13:55 | IT novinky

    Bylo spuštěno předobjednávání zařízení Flipper One s Linuxem. Za 20 dolarů si lze koupit kupón a zajistit si tím speciální cenu 379 dolarů po spuštění kampaně na Kickstarteru.

    Ladislav Hagara | Komentářů: 1
    dnes 12:44 | Nová verze

    Tor Browser, tj. fork webového prohlížeče Mozilla Firefox s integrovaným klientem sítě Tor přednastavený tak, aby přes tuto síť bezpečně komunikoval, byl vydán ve verzi 16.0. Postaven je na Firefoxu ESR 153. Vydána byla také nová verze 7.16 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. S Tor Browserem 16.0.

    Ladislav Hagara | Komentářů: 1
    dnes 04:00 | Nová verze

    FreeTube, desktopový klient pro YouTube využívající lokální API, byl vydán ve verzi 0.26.0. Toto velké opravné vydání mj. vrací částečnou podporu živých přenosů nebo přepracovává zobrazování titulků a obecně nastavení videa v přehrávači – FreeTube umožňuje např. přehrávat video s větším zrychlením.

    ʚĭɞ 🍉 | Komentářů: 1
    dnes 03:55 | Humor

    Další vlna kyberútoků zasáhla chladicí zařízení supermarketů v sedmi evropských zemích, Belgii, Lucembursku, Švédsku, Nizozemsku, Irsku, Estonsku a Finsku. Mrazáky se v některých prodejnách opět 'proměnily v trouby' a zahřály až na 50°C, což pochopitelně vedlo ke znehodnocení uskladněných potravin. Útoky navazují na podobný incident ve Francii z první poloviny října letošního roku, pachatel stále není znám.

    👻 | Komentářů: 8
    včera 17:52 | Zajímavý projekt
    WorldTUI je experimentální LLM o 360 milionech parametrů, který napodobuje terminál. Podle stisknutých kláves se snaží předpovídat změny na obrazovce a zvládá tak vyonávat rozličné příkazy, například Vim, tmux i jednoduchou hru Snake. Nejedná se o skutečný příkazový řádek, jeho 'soubory' i příkazy jsou pouze simulované a model může samozřejmě různě chybovat. WorldTUI vychází z jazykového modelu Qwen2.5-Coder-0.5B, který autor … více »
    👻 | Komentářů: 2
    včera 17:48 | Zajímavý článek
    Josef Bacik navrhuje novou abstrakci cell, která by celý kontejner reprezentovala jako jeden kernelový objekt. Proces by vznikl přímo uvnitř cell a nemohl by ji opustit. Oprávnění ke správě by se odvozovala od držení cellfd. … více »
    vencour | Komentářů: 11
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (20%)
     (30%)
     (9%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2970 hlasů
     Komentářů: 34, poslední 26.10. 08:24
    Rozcestník

    try/except/finally in Perl

    6.1.2007 11:41 | Přečteno: 1522× | Perl

    Většinou prograuju v Perlu, ale zároveň po očku sleduju Python. Můj pocit z něj se vyvýjí v takových vlnách, chvilku se mi líbí hodně, chvilku méně a tak pořád dokola. Některé věci se mi v něm líbí, ale poslední dobou je pocit spíše rozpačitý. Jeho syntaxe je, jak bych to jen řekl, příliš košatá. Ony se dělají vtípky na to, že Perlový zdroják je před komprimací k nerozeznání od stavu po komprimaci. Hloupej vtípek, ale syntaxe Perlu je vlastně strašně jednoduchá až primitivní, to se ale o Pythonu nedá říct ani omylem. Už jen těch klíčových slov! I když ke klíčovým slovům Perlu přihodím všechny ty podivné znaky se speciálním významem, tak to nebudu ani na desetině syntaktických prvků Pythonu. Jo, já vím, Lisp je Lisp, ale Perl má taky něco do sebe. (No a radši nebudu ani zmiňovat dc, že) A proč to všechno píšu?

    Dnes ráno se mi nějak nechtělo spát at tak jsem sedl k počítači a z nudy jsem si jen tak programoval. V manuálu perlsub je taková malá ukázka, jak si vytvořit syntaktický cukr ala Python try/except. Cybí tam to finally a tak jsem si to tam dodělal. A tím jsme se vrátili k tomu úvodu. V Pythonu na to musíte mít tři klíčová slova, v Perlu si to naprogramujete.

    Takže text modulu TryExceptionFinally.pm

    package TryExceptFinally;
    use strict;
    use warnings;
    use Exporter qw(import);
    use Scalar::Util qw(reftype);
    
    our @EXPORT = qw(try except finally);
    
    sub try (&@) {
    	my ($try, %subs) = @_;
    	eval { &$try };
    	no warnings 'uninitialized';
    	if ($@ and reftype $subs{except} eq 'CODE') {
    		local $_ = $@;
    		&{$subs{except}};
    	}
    	&{$subs{finally}} if reftype $subs{finally} eq 'CODE';
    }
    
    sub except (&@) { 'except', @_ }
    sub finally (&) { 'finally', @_ }
    
    1;

    a ukázkový kód

    #!/usr/bin/env perl
    
    use strict;
    use warnings;
    use TryExceptFinally;
    
    try {
    	die "hard";
    } except {
    	print "Ouch, I was die $_"
    } finally {
    	print "Finally!\n"
    };
    
    try {
    	print "Live\n";
    } except {
    	print "Ouch, I was die $_"
    } finally {
    	print "Finally!\n"
    };
    
    try {
    	print "Live\n";
    } finally {
    	print "Finally without except!\n"
    };
    
    try {
    	die "hard";
    } finally {
    	print "Finally without except!\n"
    };
    
    try {
    	die "hard";
    } except {
    	print "Ouch, I was die $_ and no finally!\n"
    };

    No a jednotlivé typy vyjímek místo několika bloků exception, se zabalí do jednoho, třeba takto

    try {
        code
    } except {
        /type1/ && do {
        code
        1 } ||
        /type2/ && do {
        code
        1 } ||
        /type3/ && do {
        code
        1 } ||
        do { # else
        code
        }
    }
           

    Hodnocení: 85 %

            špatné • dobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    6.1.2007 14:20 Miloslav Ponkrác | blog: miloslavponkrac
    Rozbalit Rozbalit vše Re: try/except/finally in Perl
    No a teď už jen zbývá zařídit, aby všechny moduly a všechny standardní funkce a operátory vyhazovaly výjimku při chybě a je to rovnocenné Pythonu. :-)

    Takže se těším na příklad, jak zachytit třeba přerušení programy z klávesnice, nebo jak v Perlu ošetřit pomocí výjimek chyba v syntaxi natahovaného modulu. :-)

    Takže šup šup do práce, ještě tohle zbývá na rovocennost s Pythonem. :-)

    P.S.: Jinak ale klobouk dolů, tohle kouzlo s Perlem se mi líbí, i když Perl kritizuju, kde můžu. Mám rád jazyky, kde základní věci jsou v syntaxi jazyka a ne emulovány něčím jiným.
    7.1.2007 00:28 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: try/except/finally in Perl
    rovnocennosť? to nie, len podobnosť, Perl snáď na úroveň Python-u ani zhodiť nemožno :-D
    na vašu otázku, ako zachytiť signál, tak napr:
    $SIG{INT} = sub { throw "Uplne zbytocna vynimka"; };
    
    7.1.2007 20:09 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: try/except/finally in Perl
    Takže přerušení z klávesnice už napsal barney, no a já jen dodám to zachycení výjimky v syntaxi modulu při natahování. Perlish way
    eval {require module && module->import(use_params)}
    if ($@) {
      $@ =~ /syntax error/ and print "syntx error in module\n"
      or print "somethink error when try use module: $@"
    }
    a pythonish way užívající to hezké try/except
    try {
      require module && module->import(use_params)
    } except {
      /syntax error/ and print "syntx error in module \n"
      or print "somethink error when try use module: $@"
    }
    Pokud chceš aby to fungovalo stejně jako běžné use, tak to ještě zavřeš do BEGIN bloku. No a exception jako objekt máme taky, takže si ve svých modulech/třídách nadefinuješ vlastní hierarchii a je vymalováno, prakticky nic co jde udělat v pythonu není problém udělat perlu, něco jde elegantněji něco naopak. Třeba generátory se v perlu nepíšou tak jednoduše jak pythonu pomocí yeld, ale na druhou stranu v pythonu máš jen jeden typ objektů, který je ekvivalentem blessnutého hashe v perlu. V podstatě všechny objekty, třídy, jmenné prostory, funkce, ... jsou v pythonu objekty typu blessnutý hash (pythonní dict), to je trochu chudé, ne? Just joking, na druhou z toho plynou pythonu některé výhody, to nesporně ;-) Třeba mi přijde, že python má potenciál být rychlejší, než perl. Skutečnost je taková jaká je.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    7.1.2007 21:33 Miloslav Ponkrác | blog: miloslavponkrac
    Rozbalit Rozbalit vše Re: try/except/finally in Perl
    Přiznám se, že nemám Perl jako jazyk moc rád, ale Vaše hrátky se mi líbí a rád je sleduji. Jsou kouzelné, opravdu.

    Jinak to zachycování výjimek pomocí signálů (chápu to správně, že jsou to signály?) má tu nevýhodu, že je nedostane thread, kterého se to týká, nebo ano? V případě klávesnice to asi nevadí.

    Jinak dokážou ty výjimky taky to co python, to znamená mít v sobě informaci o call stacku, tedy o řádcích programu, kde chyba nastala, a o všech podprogramech ze kterého se tento řádek volal?

    python je postaven na jmenných prostorech, stejně tak jako každý dynamický jazyk, ať už vezmu php, smalltalk, nebo třeba objective c.
    8.1.2007 07:30 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: try/except/finally in Perl
    Jinak to zachycování výjimek pomocí signálů (chápu to správně, že jsou to signály?) má tu nevýhodu, že je nedostane thread, kterého se to týká, nebo ano? V případě klávesnice to asi nevadí.
    Vzhledm k tomu, že je to signál zaslaný procesu (zaslaný terminálem), nevím, jak by jste to chtěl udělat jinak. I v pythonu keyboard interupt musí fungovat stejně. V perlu asi nějak takto:
    eval {
      local $SIG{INT} = sub { die "Keyboard interupt"; };
      code
    };
    if ($@) {
      $@ =~ /Keyboard interupt/ and print "Don't disrupt me!\n"
      or die $@
    }
    A to samozřejmě je thread safe, i když netuším podle čeho se určí, jestli ten signál zpracuje ten který thread.
    Jinak dokážou ty výjimky taky to co python, to znamená mít v sobě informaci o call stacku, tedy o řádcích programu, kde chyba nastala, a o všech podprogramech ze kterého se tento řádek volal?
    Ano, jestliže si tam tu informaci přidáte. Standardní výjimky jsou textové, protože jsou tam od doby, kdy ještě ani perl nebyl objektový. Vlastní výjimky si člověk může udělat objektové a call stack si tam doplnit. Standardní textová výjimka nekončící na EOL je vždy doplněna o informaci, kde k ní došlo. Není problém (až na určité spomalení) si nad každou funkcí udělat eval wrapper a všechny výjimky odchytávat, měnit na objektové a doplňovat o call stack. V pythonu to už udělali za vás. V tomhle je python lepší, o tom žádná. Možná je na to v perlu už udělaný nějaký modul, nebo nějaká vlastnost, která jde zapnout, zatím jsem po tom nepátral.
    python je postaven na jmenných prostorech, stejně tak jako každý dynamický jazyk, ať už vezmu php, smalltalk, nebo třeba objective c.
    a nebo třeba perl, to je přece jasné. A je taky celkem logické, že to v těch jazycích implementovali pomocí prostředků toho samého jazyka. Proč se s tím implementovat dvakrát, že. Takže v perlu jsou jmenné prostory hash a v pythonu objekt a ten je v podstatě dict. Mimochodem, perlový local. To jde udělat i v pythonu, ale zdaleka to nejde tak jednoduše pomocí jednoho klíčového slova jako v perlu. Jak říkám, každý jazyk je v něčem lepší a v něčem horší.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    8.1.2007 10:29 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: try/except/finally in Perl
    ono, programovať multithreadovo treba vedieť, osobne si myslím, že 9 z 10tich ľudí živiacich sa programovaním to neovláda. Takisto výnimky, tiež ich treba ovládať.

    Informácie o kontexte: miesto die používať Carp::confess.

    Samotný die umožňuje aj iný parameter ako scalar

    die new XYZ::Exception;
    
    Ono, aj catch sa dá implmentovať štýlom
    try {}
    catch qr/aaa/ => {}
    catch 'AAA::Exception' => {}
    ...
    
    Btw, keď spomínate local, také jeho použitie na "dočasné" prekrytie ľubovoľnej funkcie môže byť zaujímavé :-)

    Od včera mi bohužiaľ panikári kernel, takže len naznačím rozpracovanú myšlienku:

    sub try (&;@) {
      my (my ($try, %subs) = @_;
    
      return new Exception::Block ($try, \ %subs) if defined wantarray;
    ...
    }
    
    # priklad použitia
    my $block = try { ... } catch A => { ... } catch qr/B) => { ... };
    
    $block->('www.abclinuxu.cz');
    $block->('www.example.com');
    $block->catch (A => sub { ... })->('...');
    
    8.1.2007 17:46 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: try/except/finally in Perl
    ono, programovať multithreadovo treba vedieť, osobne si myslím, že 9 z 10tich ľudí živiacich sa programovaním to neovláda. Takisto výnimky, tiež ich treba ovládať.

    Informácie o kontexte: miesto die používať Carp::confess.

    Tak to ani zdaleka není to o čem jsem mluvil. Carp::confess produkuje textový výstup, který by se pro další zpracování musel parsovat a to je vždy nespolehlivé. Také to neřeší systémové výjimky generované přímo perlem. V těch die nahradíte celkem těžko. To první jde samozřejmě nahradit vhodnými objektovými výjimkami, které si call back naplní do své vnitřní struktury pomocí caller a mohou být dále strojově zpracovány. To druhé je trochu jiné kafe a žádný elegantní způsob mě nenapadá.
    Samotný die umožňuje aj iný parameter ako scalar
    die new XYZ::Exception;
    
    Ono, aj catch sa dá implmentovať štýlom
    try {}
    catch qr/aaa/ => {}
    catch 'AAA::Exception' => {}
    ...
    
    Btw, keď spomínate local, také jeho použitie na "dočasné" prekrytie ľubovoľnej funkcie môže byť zaujímavé :-)

    Od včera mi bohužiaľ panikári kernel, takže len naznačím rozpracovanú myšlienku:

    sub try (&;@) {
      my (my ($try, %subs) = @_;
    
      return new Exception::Block ($try, \ %subs) if defined wantarray;
    ...
    }
    
    # priklad použitia
    my $block = try { ... } catch A => { ... } catch qr/B) => { ... };
    
    $block->('www.abclinuxu.cz');
    $block->('www.example.com');
    $block->catch (A => sub { ... })->('...');
    
    Nějak mi uniká k čemu by to jako mělo být dobré.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    9.1.2007 08:41 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: try/except/finally in Perl
    Nějak mi uniká k čemu by to jako mělo být dobré.
    Napr situácia, keď funkcia/metóda štandardne ošetruje niektoré/všetky výnimky, správne pre 90% použití. Zvyšných 10% definuje svoje vlastné ošetrenia.
    9.1.2007 17:48 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: try/except/finally in Perl
    Hmm, tak to by snad bylo rovnou lepší udělat ekvivalent pythoního with. To taky není žádný velký problém a dělalo by to přibližně tohle. Pak my přijde jako čistější vytvořit potomka příslušného objektu.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.

    Založit nové vlákno • Nahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.