Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.
Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.
Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… 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()' #81Kromě 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.txtV 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.txtV 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.txtDalší ř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.txtTaké 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.