Knihovna libpng, tj. oficiální referenční knihovna grafického formátu PNG (Portable Network Graphics), byla vydána ve verzi 1.6.51. Opraveny jsou 4 bezpečnostní chyby obsaženy ve verzích 1.6.0 (vydána 14. února 2013) až 1.6.50. Nejvážnější z chyb CVE-2025-65018 může vést ke spuštění libovolného kódu.
Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 159 (pdf).
Hru Warhammer: Vermintide 2 (ProtonDB) lze na Steamu získat zdarma napořád, když aktivaci provedete do pondělí 24. listopadu.
Virtualizační software Xen (Wikipedie) byl vydán v nové verzi 4.21. Podrobnosti v poznámkách k vydání a přehledu nových vlastností.
Evropská komise schválila český plán na poskytnutí státní pomoci v objemu 450 milionů eur (téměř 11 miliard Kč) na rozšíření výroby amerického producenta polovodičů onsemi v Rožnově pod Radhoštěm. Komise o tom informovala v dnešní tiskové zprávě. Společnost onsemi by podle ní do nového závodu v Rožnově pod Radhoštěm měla investovat 1,64 miliardy eur (téměř 40 miliard Kč).
Microsoft v příspěvku na svém blogu věnovaném open source oznámil, že textové adventury Zork I, Zork II a Zork III (Wikipedie) jsou oficiálně open source pod licencí MIT.
První prosincový týden proběhne SUSE Hack Week 25. Zaměstnanci SUSE mohou věnovat svůj pracovní čas libovolným open source projektům, například přidání AI agenta do Bugzilly, implementaci SSH v programovacím jazyce Zig nebo portaci klasických her na Linux. Připojit se může kdokoli.
Google oznámil, že Quick Share na Androidu funguje s AirDropem na iOS. Zatím na telefonech Pixel 10. Uživatelé tak mohou snadno přenášet soubory z telefonů s Androidem na iPhony a obráceně.
Byla vydána nová verze 8.5 (8.5.0) skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Přináší řadu novinek a vylepšení (URI Extension, Pipe Operator, Clone With, …). Vydána byla také příručka pro přechod z předchozích verzí.
Evropská komise zahájila tři vyšetřování týkající se cloudových platforem Amazon Web Services (AWS) a Microsoft Azure. Evropská exekutiva, která plní také funkci unijního antimonopolního orgánu, chce mimo jiné určit, zda jsou americké společnosti Microsoft a Amazon v cloudových službách takzvanými gatekeepery, tedy hráči, kteří významně ovlivňují provoz internetu a musí dle nařízení o digitálních trzích (DMA) na společném trhu
… více »sed, awk, grep,… používat tzv. Perl one-liners. U mě to došlo tak daleko, že místo toho abych zjišťoval jak escapuje echo, použiji raději něco jako perl6 -e 'say join "\n", "a\tb", "1\t2"'. Ale samozřejmě nic vám nebrání, když uznáte za vhodné, tyto one-liners kombinovat s nástroji jako find, column,….
-e, za kterým následuje kód Perlu 6, který se spustí.
perl6 -e 'say ((237/75+162/3)/(9+54)).nude.join: "/" ;' #1429/1575 perl6 -e 'say "larry wall".wordcase;' #Larry WallDalšími užitečné přepínače jsou
-n a -p, které automaticky přidají smyčku přes všechny řádky, -p je na konci ještě vytiskne.
history|perl6 -ne '.say if m:r:s/^^perl6 "-"ne>>/ && /:r <<if>> /' #vytiskni řádky které začínají na perl6 -ne a obsahují slovo if perl6 -ne '.say if /"<"pre>>/ ff /"<""/"pre">"/' naucte_me_Perl_6_III.html #vytiskni řádky ohraničené značkou pre xsel|perl6 -pe '.=trim' #odstraní mezery před a za řádkem perl6 -pe 's:g/wamba/wambash/' /etc/passwd #nahradí wamba za wambashDalší one-liners v Perlu 6 najdete i na githubu Davida Farrella.
line, slurp,…, implicitně čtou se standardního vstupu a pokud je zadán parametr, tak se souborů, které májí názvy jako parametry. Ale k parametrům na příkazové řádce můžeme přistupovat i pomocí @*ARGS, nebo pomocí definice podprogramu MAIN. Se standardním vstupem/výstupem můžeme manipulovat pomocí proměnných $*IN, $*OUT.
cat soubor1|perl6 -e 'say lines.elems' #počet řádků v soubor1
perl6 -e 'say lines.elems' soubor1 #totéž
cat soubor1|perl6 -e 'say lines.elems' soubor2 soubor3 #počet řádků v soubor2 + v soubor3
cat soubor1|perl6 -e 'say $*IN.lines.elems' soubor2 soubor3 #počet řádků v soubor1
cat soubor1|perl6 -e 'say @*ARGS[1].IO.lines.elems' soubor2 soubor3 #počet řádků v soubor3
cat soubor1|perl6 -e 'sub MAIN ($,$soubor) { say $soubor.IO.lines.elems }' soubor2 soubor3 #totéž
@a.join: "\n", tak další možností je užít tzv. feed operátor ==>, popř. <==, který se nejčastěji používá k práci s poli.
perl6 -e 'say() <== join "\n" <== ^10'
perl6 -e '^10 ==> join "\n" ==> say()'
perl6 -e '^10 ==> { @^a Z+ @^a[1.. *] }() ==> sum() ==> say()' #81
Kromě ntic jsou v Perlu 6 i páry a => 12, :a<12>, :12a, které se skládají s klíče a hodnoty. Jedna věc, kterou jsem si hned oblíbil, je push párů do asociativního pole.
perl6 -e 'say (%).push: (a => 3, b => 10, :a<12>, :21a);' #{a => [3 12 21], b => 10}
perl6 -e 'say (%).push: <a b b c a c> Z=> 1 .. *' #{a => [1 5], b => [2 3], c => [4 6]}
Povšimněte si jak jsme použili anonymní proměnnou asociativního pole %, kterou nemusíme definovat. Podobně by jsme mohli použít pro push do pole @, nebo pro práci s čísly, resp. řetězci $.
perl6 -e 'say (@).push: "a", "b", "c"' #[a b c] xsel|perl6 -pe '$_ [R~]= $++ ~ ","' #očísluje jednotlivé řádky
one-linerů, které budou sčítat čísla v pátém sloupci podle tabulátoru, před řádkem --.
První si vygenerujeme testovací data:
perl6 -e 'use Inline::Perl5; use Data::Random:from<Perl5> <:all>; ( loop { join "\t", rand_words(:2min :3max)>>.tc.join(" "), rand_datetime(), (^100).roll(4), rand_words() } ).head(1000).rotor((^20+1).roll(10)).&cross("--")>>.say ' >>Plocha/DATA.txt
V diskuzi pod prvním blogem o Perlu 6 jsem si stěžoval, že načítání Inline::Perl5 je neúměrně dlouhé. Tady byla sjednána náprava a již to trvá méně než vteřinu. Nicméně vygenerovaní cca 1000 položek předešlým one-linerem trvá více než 30 vteřin.
Testovací data vypadají přibližně takto:
Festive Journeyman 2016-11-05 22:04:01 34 68 17 84 piss Frightens Astray 2016-09-14 22:41:45 5 2 93 84 reprograms Cards Optima Fisher 2016-09-18 12:45:06 85 29 72 40 transitivity -- Presumably Gore 2016-05-30 09:29:56 7 49 68 69 archipelagoes Soccer Devotions 2016-10-03 22:13:15 64 79 23 88 delaying -- Footfall Bliss 2016-07-02 17:20:29 29 22 33 2 connect Merely Transcends Moline 2016-08-15 13:36:36 87 94 9 14 pounce Advocated Compliments Sputter 2016-05-11 00:04:53 15 38 22 69 inconsiderate -- Promotes Tread Complexes 2016-08-18 17:38:55 1 47 91 41 devised --První řešení napodobí to v Perlu 5 ze zmíněné diskuze. Použijeme přepínač
-n, zapamatujeme si předešlý řádek, a pokud současný řádek je roven --, tak přičteme jeho pátý sloupec do $sum. Nakonec $sum vypíšeme.
perl6 -ne 'state $pred; state $sum += $pred.split("\t").[4] if $_ eq "--"; $pred=$_; END {say $sum}' Plocha/DATA.txt
V druhém řešení místo každého řádku budeme brát dvojici řádek, následující_řádek. Vyfiltrujeme ty dvojici které mají první prvek roven -- a následně s nultého prvku vybereme 5. sloupec, sečteme a vytiskneme.
perl6 -e 'lines().rotor( 2 => -1 ) ==> grep *.[1] eq "--" ==> map *.[0].split("\t").[4] ==> sum() ==> say() ' Plocha/DATA.txt
Další řešení pracuje s páry ve tvaru následující_řádek => řádek a použijeme push do asociativního pole. Vybereme prvek (pole) odpovídající klíči --, vybereme 5. sloupce, sečteme a vytiskneme.
perl6 -e '(%).push( lines().&{ @^a[1 .. *] Z=> @^a } ).<-->.map( *.split("\t").[4] ).sum.say' Plocha/DATA.txt
Také se můžeme najít regulární výraz, který přímo vybere pátý sloupec před řádkem --.
perl6 -e 'slurp.comb(/:r^^[\T+\t] ** 4 <( \d+ )> \N*\n "--" \n/).sum.say' Plocha/DATA.txtPoslední řešení rozdělí data pomocí
--\n. Poté z jednotlivých částí vezme pátý sloupec posledního řádku, sečte, vytiskne.
perl6 -e 'slurp.split("--\n", :skip-empty).map( *.lines.[*-1].split("\t").[4] ).sum.say' Plocha/DATA.txt
perl6 -e 'unit sub MAIN; spurt $^file ~ ++$, .join: "\n" for $^file.IO.lines.permutations' pok.txtNalezení duplikátních řádků.
perl6 -e '(%).push( slurp.lines.pairs.invert ).grep( *.value.elems > 1).sort( *.value.elems )>>.say' soubor.txtNahrazení části textového souboru jiným.
perl6 -e 'unit sub MAIN; my @soubor1 = $^soubor1.IO.lines; say join "\n", @soubor1, $^soubor2.IO.lines.[@soubor1.elems .. *]' pok.txt soubor.txtBash - násobení po řádcích
perl6 -ne '$_ ==> split "x" ==> map (* * 1.328).round ==> join "x" ==> say()' soubor.txt
perl6 -ne '.split("x").map( * * 1.328 )>>.round.join("x").say' soubor.txt
Tiskni
Sdílej:
perl6 -e 'print "a"; sleep(5); say "b";'vytiskne
a a za pět vteřin b.
Oproti Perl 5 verzi
perl -E 'print "a"; sleep(5); say "b";'která vytiskne až po pěti vteřinách
ab.
Nicméně v Sinopsis je napsáno, že by autoflush, měl fungovat, až po zapnutí $*OUT.autoflush, popř. by měli jít všechny data najednou uvolnit pomocí flush.
autoflush je v odstraněných funkcích a je tam napsáno, že je to ponecháno na implementaci. Vypadá to, že Rakudo flushuje automaticky. Kdyby náhodou někde ne, tak ta metoda flush by měla funguvat.