Od soboty do úterý probíhá v Hamburku konference 39C3 (Chaos Communication Congress) věnovaná také počítačové bezpečnosti nebo hardwaru. Program (jiná verze) slibuje řadu zajímavých přednášek. Streamy a záznamy budou k dispozici na media.ccc.de.
Byl představen nový Xserver Phoenix, kompletně od nuly vyvíjený v programovacím jazyce Zig. Projekt Phoenix si klade za cíl být moderní alternativou k X.Org serveru.
XLibre Xserver byl 21. prosince vydán ve verzi 25.1.0, 'winter solstice release'. Od založení tohoto forku X.Org serveru se jedná o vůbec první novou minor verzi (inkrementovalo se to druhé číslo v číselném kódu verze).
Wayback byl vydán ve verzi 0.3. Wayback je "tak akorát Waylandu, aby fungoval Xwayland". Jedná se o kompatibilní vrstvu umožňující běh plnohodnotných X11 desktopových prostředí s využitím komponent z Waylandu. Cílem je nakonec nahradit klasický server X.Org, a tím snížit zátěž údržby aplikací X11.
Byla vydána verze 4.0.0 programovacího jazyka Ruby (Wikipedie). S Ruby Box a ZJIT. Ruby lze vyzkoušet na webové stránce TryRuby. U příležitosti 30. narozenin, první veřejná verze Ruby 0.95 byla oznámena 21. prosince 1995, proběhl redesign webových stránek.
Všem čtenářkám a čtenářům AbcLinuxu krásné Vánoce.
Byla vydána nová verze 7.0 linuxové distribuce Parrot OS (Wikipedie). S kódovým názvem Echo. Jedná se o linuxovou distribuci založenou na Debianu a zaměřenou na penetrační testování, digitální forenzní analýzu, reverzní inženýrství, hacking, anonymitu nebo kryptografii. Přehled novinek v příspěvku na blogu.
Vývojáři postmarketOS vydali verzi 25.12 tohoto před osmi lety představeného operačního systému pro chytré telefony vycházejícího z optimalizovaného a nakonfigurovaného Alpine Linuxu s vlastními balíčky. Přehled novinek v příspěvku na blogu. Na výběr jsou 4 uživatelská rozhraní: GNOME Shell on Mobile, KDE Plasma Mobile, Phosh a Sxmo.
Byla vydána nová verze 0.41.0 multimediálního přehrávače mpv (Wikipedie) vycházejícího z přehrávačů MPlayer a mplayer2. Přehled novinek, změn a oprav na GitHubu. Požadován je FFmpeg 6.1 nebo novější a také libplacebo 6.338.2 nebo novější.
Byla vydána nová verze 5.5 (novinky) skriptovacího jazyka Lua (Wikipedie). Po pěti a půl letech od vydání verze 5.4.
Řešení dotazu:
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?
Jinak uz jdu na study toho seek, moc dekuji, verim, ze mi to pomuze vyresit problem
)
Moc dekuji - tady neslo o to, ze bych nevedel, kde hledat, ale ja nevedel, co hledat, jeste jednou diky
)
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.
Tiskni
Sdílej: