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í
×
    včera 16:55 | Nová verze

    Byla vydána verze 1.93.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.

    Ladislav Hagara | Komentářů: 0
    včera 14:00 | Komunita

    Svobodný operační systém ReactOS (Wikipedie), jehož cílem je kompletní binární kompatibilita s aplikacemi a ovladači pro Windows, slaví 30. narozeniny.

    Ladislav Hagara | Komentářů: 6
    včera 11:00 | IT novinky

    Společnost Raspberry Pi má nově v nabídce flash disky Raspberry Pi Flash Drive: 128 GB za 30 dolarů a 256 GB za 55 dolarů.

    Ladislav Hagara | Komentářů: 2
    včera 10:22 | Zajímavý software

    Technologie Skip pro multiplatformní mobilní vývoj, která umožňuje vývojářům vytvářet iOS a Android aplikace z jediné Swift a SwiftUI kódové základny, se s vydáním verze 1.7 stala open source.

    Ladislav Hagara | Komentářů: 3
    včera 03:33 | Zajímavý software Ladislav Hagara | Komentářů: 1
    včera 00:11 | Nová verze

    Byla vydána nová major verze 34.0.0 webového prohlížeče Pale Moon (Wikipedie) vycházejícího z Firefoxu. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 1
    21.1. 16:11 | Humor

    Win8DE je desktopové prostředí pro Wayland, inspirované nechvalně proslulým uživatelským rozhraním Metro z Windows 8. Nabízí dlaždicové rozhraní s velkými tlačítky a jednoduchou navigací, optimalizované pro dotyková zařízení. Cílem projektu je přetvořit design operačního systému Windows 8 do funkčního a minimalistického rozhraní vhodného pro každodenní použití na Linuxu.

    NUKE GAZA! 🎆 | Komentářů: 12
    21.1. 14:33 | Nová verze

    Laboratoře CZ.NIC vydaly Datovku 4.28.0 a Mobilní Datovku 2.6.0. Hlavní novinkou je ukládání rozpracovaných datových zpráv do konceptů. Datovka je svobodné multiplatformní aplikace pro přístup k datovým schránkám a k trvalému uchovávání datových zpráv v lokální databázi.

    Ladislav Hagara | Komentářů: 4
    21.1. 14:22 | Zajímavý projekt

    Unix Pipe Game je vzdělávací karetní hra zaměřená na děti a rodiče, která děti učí používat unixové příkazy prostřednictvím interaktivních úkolů. Klíčovým prvkem hry je využití symbolu | pro pipeline neboli 'rouru', který umožňuje propojit výstupy a vstupy jednotlivých unixových příkazů, v tomto případě vytištěných na kartičkách. Předpokládá se, že rodič má alespoň nějaké povědomí o unixových příkazech a jejich provazování pomocí |.

    … více »
    NUKE GAZA! 🎆 | Komentářů: 3
    21.1. 13:55 | Zajímavý software

    PCIem je linuxový framework, který vytváří virtuální zařízení PCIe pomocí technik, které umožňují hostitelskému operačnímu systému rozpoznat tyto syntetické 'neexistující' karty jako fyzické zařízení přítomné na sběrnici. Framework PCIem je primárně zamýšlen jako pomůcka pro vývoj a testování ovladačů bez nutnosti použít skutečný hardware. Dle tvrzení projektu si fungování PCIem můžeme představit jako MITM (Man-in-the-Middle), který se nachází mezi ovladači a kernelem.

    NUKE GAZA! 🎆 | Komentářů: 1
    Které desktopové prostředí na Linuxu používáte?
     (17%)
     (5%)
     (0%)
     (10%)
     (21%)
     (3%)
     (5%)
     (2%)
     (11%)
     (36%)
    Celkem 573 hlasů
     Komentářů: 17, poslední včera 15:24
    Rozcestník

    Dotaz: Nelogicke chovani v perlu

    27.11.2009 23:48 Mr.S1lent.cz
    Nelogicke chovani v perlu
    Přečteno: 245×
    Zdravim, mam tu jeden zahadny problem, nad kterym dumam uz asi cely den...

    Zde je cast DB modulu: http://www.pastebin.cz/27127 a zde priklad volani metody _view: http://www.pastebin.cz/27128

    a ted problem - do terminalu mi to vypise hodnotu pouze u test1, avsak test2 - 4 zustavaji empty, vypisy z Dumperu jsou konstantni, vedel by nekdo, kde muze byt chyba? Me absolutne nic nenapada, nechapu, jak se to takhle vubec muze chovat....

    Řešení dotazu:


    Odpovědi

    28.11.2009 00:54 buff | skóre: 10 | blog: buff
    Rozbalit Rozbalit vše Re: Nelogicke chovani v perlu
    Problém je IMHO v tom whilu. Ten první while to projede nakonec a ty další už vrací false v první iteraci. Potřeboval bys vyresetovat ten prstíček, co ukazuje na aktuální řádek.
    28.11.2009 00:57 buff | skóre: 10 | blog: buff
    Rozbalit Rozbalit vše Re: Nelogicke chovani v perlu
    Snad seek? Hope it helps. Zkus, mně se to zkoušet nechce ;-)
    28.11.2009 07:32 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Nelogicke chovani v perlu
    Doporučuju ty věci dávát dohromady s dotazem a ne na pastebin. Za 2 roky až někdo na tohle náhodou narazí, tak už nepochopí co se řešilo.

    Takže:
    sub new {
        my ( $pkg, $db ) = @_;
        my $self = bless {}, $pkg;
        $self->{_db} = "db/$db.db";
        open( $self->{_dbhandler}, $self->{_db} ) or die "DB $db.db not open\n";
        return $self;
    }
    sub _view {
        my ( $self, $arg ) = @_;
        my $dbhandler = $self->{_dbhandler};
        while ( my $line = <$dbhandler> ) {
            if ( $line =~ /( *)$arg( *)\=( *)'(.*?)';( *)/ ) {
                return $4;
            }
        }
        return undef;
    }
    $self->{_db} = new TAI::DB( 'status' );
    print Dumper( $self->{_db} );
    print "test1: " . $self->{_db}->_view( 'task' ) . "\n";
    print Dumper( $self->{_db} );
    print "test2: " . $self->{_db}->_view( 'task' ) . "\n";
    print Dumper( $self->{_db} );
    print "test3: " . $self->{_db}->_view( 'task' ) . "\n";
    print "test4: " . $self->{_db}->_view( 'task' ) . "\n";
    No a k tomu dotazu, myslím si to co ostatní: soubor projíždíte po řádkách, takže nebude vracet v každém volání totéž. Dá se to řešit různě, ale myslím, že děláte tu celou věc trochu přes ruku, co přesně má být účelem toho kódu?
    In Ada the typical infinite loop would normally be terminated by detonation.
    28.11.2009 17:14 Mr.S1lent.cz
    Rozbalit Rozbalit vše Re: Nelogicke chovani v perlu
    Ucelem toho kodu - modulu - je vytvorit takovy obsluhovac souborů, ktere mi slouzi jako text/plan uloziste - datazabaze pouzivam jen tehdy, pokud je to nevyhnutelne nutne, tudiz to resim takhle. Podle vasich reakci usuzuju, ze si ten filehandler "pamatujue", kde naposledy skoncil a pote projizdeni souboru po radku pokracuje prave od toho mista, je to tak? :-) Jinak uz jdu na study toho seek, moc dekuji, verim, ze mi to pomuze vyresit problem :-))
    28.11.2009 17:30 Mr.S1lent.cz
    Rozbalit Rozbalit vše Re: Nelogicke chovani v perlu
    Tak, problem je vyresen, seek mi opravdu pomohl :-) Moc dekuji - tady neslo o to, ze bych nevedel, kde hledat, ale ja nevedel, co hledat, jeste jednou diky :-))
    28.11.2009 18:03 Nick
    Rozbalit Rozbalit vše Re: Nelogicke chovani v perlu
    No vidíš. A příště nenadávej na Perl a hledej nejdřív problém mezi klávesnicí a židlí :-)
    29.11.2009 20:13 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Nelogicke chovani v perlu
    No, možností jak tohle udělat je hodně a upřímně seek je jeden z těch méně šťastných.

    Nejjednodušší je dát open/close do rutiny _view, čili pokaždé soubor otevřít, najít řádek a potom ho zavřít. Je to stejně efektivní jako seek, ale čistější a robustnější vůči přepisu/smazání souboru.

    Další možnost je v konstruktoru soubor kompletně přečíst a uložit si páry klíč=hodnota (pokud chápu dobře, tak ten soubor má takovou strukturu) do hashe a ve _view pouze vracet hodnoty z hashe. Případně dodělat něco jako reload, kterej to načte na požádání znova. Tento přístup je nesporně efektivnější co se týče počtu čtení souboru.

    Třetí možnost je se porozhlédnout po CPANu, co například Config::Tiny a další?

    Jinak, databáze není nevyhnutelně špatná věc.

    Ještě pár postřehů k tomu kódu:
    if ( $line =~ /( *)$arg( *)\=( *)'(.*?)';( *)/ ) {
                return $4;
            }
    
    je lépe zapsat jako
    if ( $line =~ /\A\s*\Q$arg\E\s*\=\s*'(.*?)';\s*\Z/ ) {
                return $1;
            }
    
    (použití \s pro prázdné znaky, \A ... \Z pro ohraničení a \Q ... \E pro quotování proměnné. BTW regexp pro načtení celého souboru by mohl vypadat asi takto nějak
    my %config;
    open (my $soubor, '<', 'soubor.txt');
    {
        unset $/;
        %config = (<$soubor> =~ /^\s*(\Q$arg\E)\s*\=\s*'(.*?)';\s*?/xmsg);
    }
    
    Místo return undef; je kratší (a správnější) použít jen return;.

    Místo open...or die je modernější metoda use autodie.
    In Ada the typical infinite loop would normally be terminated by detonation.

    Založit nové vláknoNahoru

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

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