Byl vydán Fedora Asahi Remix 40, tj. linuxová distribuce pro Apple Silicon vycházející z Fedora Linuxu 40.
Představena byla služba Raspberry Pi Connect usnadňující vzdálený grafický přístup k vašim Raspberry Pi z webového prohlížeče. Odkudkoli. Zdarma. Zatím v beta verzi. Detaily v dokumentaci.
Byla vydána verze R14.1.2 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5). Přehled novinek v poznámkách k vydání, podrobnosti v seznamu změn.
Dnešním dnem lze již také v Česku nakupovat na Google Store (telefony a sluchátka Google Pixel).
Apple představil (keynote) iPad Pro s čipem Apple M4, předělaný iPad Air ve dvou velikostech a nový Apple Pencil Pro.
Richard Biener oznámil vydání verze 14.1 (14.1.0) kolekce kompilátorů pro různé programovací jazyky GCC (GNU Compiler Collection). Jedná se o první stabilní verzi řady 14. Přehled změn, nových vlastností a oprav a aktualizovaná dokumentace na stránkách projektu. Některé zdrojové kódy, které bylo možné přeložit s předchozími verzemi GCC, bude nutné upravit.
Free Software Foundation zveřejnila ocenění Free Software Awards za rok 2023. Vybráni byli Bruno Haible za dlouhodobé příspěvky a správu knihovny Gnulib, nováček Nick Logozzo za front-end Parabolic pro yt-dlp a tým Mission logiciels libres francouzského státu za nasazování svobodného softwaru do praxe.
Před 10 lety Microsoft dokončil akvizici divize mobilních telefonů společnosti Nokia a pod značkou Microsoft Mobile ji zanedlouho pohřbil.
Fedora 40 release party v Praze proběhne v pátek 17. května od 18:30 v prostorách společnosti Etnetera Core na adrese Jankovcova 1037/49, Praha 7. Součástí bude program kratších přednášek o novinkách ve Fedoře.
Stack Overflow se dohodl s OpenAI o zpřístupnění obsahu Stack Overflow pro vylepšení OpenAI AI modelů.
my $radek = <>; my %thinks; @thinks{qw(jmeno prijmeni telefon)} = split ' ', $radek; while (my ($name, $value) = each %thinks) { print "$name = $value\n"; }Ale to jsem ti asi moc nepomohl, protože to není setřízené. A nebo takhle?
my $radek = <>; my @names = qw(jmeno prijmeni telefon); my %thinks; @thinks{@names} = split ' ', $radek; foreach my $name (@names) { print "$name = $thinks{$name}\n"; }Nebo takhle:
my $radek = <>; my @names = qw(jmeno prijmeni telefon); my $i = 0; no strict 'refs'; ${$names[$i++]} = $_ foreach (split ' ', $radek)[0..$#names]; foreach (@names) { print "$_ = ${$_}\n"; }To už bylo trochu silnější kafe, že To už by bylo lepší
my $radek = <>; my @names = qw(jmeno prijmeni telefon); my @array = split ' ', $radek; for(my $i=0; $i<@names; $i++){ print "$names[$i] = $array[$i]\n"; }Já osobně bych použil tohle nebo tu druhou možnost.
sub { map { print shift, ': ', $_, "\n"; } split ':', scalar <> || exit }->(qw(meno prijmeni telefon)) while 1;
sub { map print(shift, ": $_\n"), (split / /, scalar <>)[0..$#_] or exit }->(qw(meno prijmeni telefon)) while 1;nebo
sub { map print(shift, ": $_\n"), split / /, scalar <>, @_ or exit }->(qw(meno prijmeni telefon)) while 1;Podle toho jak se to má chovat.
Já jsem teda, (nejen) co se týče PERLu, lama , ale můžu se zeptat jakou má výhodu použít místo hashe dvě pole? Berte to jako čistě technický dotaz bez jakýchkoliv narážek - jen mě zajímá, jestli je to paměťově méně náročné nebo výkonnější řešení než použít jeden hash... Děkuji.
my @names = qw(jmeno prijmeni telefon) my @arrays = ([qw(Franta Novák 564321564)]) x 1000000;versus
my @seznam = ({jmeno => 'Franta', prijmeni => 'Novák', telefon => 564321564}) x 1000000;To druhé zabere poněkud víc paměti a přístup k jednotlivým položkám je o chloupek pomalejší i když se s tím zase líp pracuje. Jedním ze spůsobů jak to udělat elegantně s polem je třeba
my $counter; BEGIN { my $index = $counter++; sub jmeno() {$index} } BEGIN { my $index = $counter++; sub prijmeni() {$index} } BEGIN { my $index = $counter++; sub telefon() {$index} } my @seznam; while (<>) { chomp; push @seznam, [(split ' ')[0 .. $counter-1]]; } foreach (@seznam) { my @record = @$_; print <<EOF; jmeno: $record[jmeno] prijmeni: $record[prijmeni] telefon: $record[telefon] EOF }Jen podotýkám, že funkce s prototypem
jmeno
, prijmeni
a telefon
jsou de facto konstanty a vloží se inline. Dělám to samé co modul const
.
dalsie elegantne riesenie (skoro zhodne s tymi konstantami):
package aaa; use fields qw(jmeno prijmeni telefon) package main; my aaa $array = [ 0, split / /, $radek ]; print "jmeno: $array->{jmeno}\n";
pokial ma pamat neklame (moja, nie RAM), tak perl indexuje vsetky hodnotu raz pouzite ako kluc v hash-i, takze napr retazec "prijmeni" je pre vsetky hashe ulozeny iba raz a ako kluc sa pouziva jeho index.
$ perl -e '@seznam = ({jmeno => 'Franta', prijmeni => 'Novak', telefon => 564321564}) x 10000000; sleep 10'& $ ps -o pid,rss,vsz,cmd -Cperl PID RSS VSZ CMD 27137 236440 267004 perl -e @seznam = ({jmeno => Franta, prijmeni => Novak, telefon => 564321564}) x 10000000; sleep 10 $ perl -e 'my @names = qw(jmeno prijmeni telefon);my @arrays = ([qw(Franta Novák 564321564)]) x 10000000; sleep 10'& $ ps -o pid,rss,vsz,cmd -Cperl PID RSS VSZ CMD 27143 236456 267004 perl -e my @names = qw(jmeno prijmeni telefon);my @arrays = ([qw(Franta Novák 564321564)]) x 10000000; sleep 10Zdá se, že máte pravdu, takže zůstavá už jen ten ždibíček rychlosti.
$ perl -e '@names = qw(jmeno prijmeni telefon);for($i=0;$i<1000000;$i++){push @arrays, [qw(Franta Novák 564321564)]};print "done\n"; sleep 10'& done $ ps -o pid,rss,vsz,cmd -Cperl PID RSS VSZ CMD 27376 209568 213616 perl -e @names = qw(jmeno prijmeni telefon);for($i=0;$i<1000000;$i++){push @arrays, [qw(Franta Novák 564321564)]};print $ perl -e 'for($i=0;$i<1000000;$i++){push @arrays, {jmeno => Franta, prijmeni => Novak, telefon => 564321564}};print "done\n"; sleep 10'& done $ ps -o pid,rss,vsz,cmd -Cperl PID RSS VSZ CMD 27512 248860 252932 perl -e for($i=0;$i<1000000;$i++){push @arrays, {jmeno => Franta, prijmeni => Novak, telefon => 564321564}};print "done $ perl -e 'sleep 10'& $ ps -o pid,rss,vsz,cmd -Cperl PID RSS VSZ CMD 27554 1240 5320 perl -e sleep 10Ten rozdíl je po odečtení režije perlu skoro celá pětina. A to jsou ty klíče relativně krátké.
PID RSS VSZ CMD 5873 315240 317176 perl -e '@list = map { {$_ => $_ } } 0 .. 1000000; print "done\n"; sleep 10' 5880 393688 395572 perl -e '@list = map { {$_ => $_, $_+1 => $_, $_+2 => $_} } 0 .. 1000000; print "done\n" 5888 268208 270132 perl -e '@list = map { {1 => $_, 2 => $_, 3 => $_} } 0 .. 1000000; print "done\n"; sleep 10' 5894 268208 270132 perl -e '@list = map { {10001 => $_, 10002 => $_, 10003 => $_} } 0 .. 1000000; print "done\n"; sleep 10' 5898 205440 207300 perl -e '@list = map { [$_, $_, $_] } 0 .. 1000000; print "done\n"; sleep 10;
PID RSS VSZ CMD 5921 439388 478164 perl -e '@list = map { {$_ => $_, $_+1000000 => $_, $_+2000000 => $_} } 0 .. 1000000; print "done\n"; sleep 10;'
PID RSS VSZ CMD 29161 260520 264708 perl -e @list = map +{1 => undef, 2 => undef, 3 => undef}, 0 .. 1000000; print "done\n"; sleep 10 29120 260532 264708 perl -e @list = map +{"a"x100 => undef, "b"x100 => undef, "c"x100 => undef}, 0 .. 1000000; print "done\n"; sleep 10Což značí, že máte patrně pravdu. Tím se to dost podobá implementaci dict v pythonu.
PID RSS VSZ CMD 29709 487364 491560 perl -e @keys = map chr(ord("a")+$_)x100, 0..25; @list = map +{map +($keys[$_], undef), 0..25}, 0 .. 100000; print "don 29742 254184 258316 perl -e @keys = 0..25; @list = map +{map +($keys[$_], undef), 0..25}, 0 .. 100000; print "done\n"; sleep 10Zdá se, že perl má svá tajemství. Uložení klíčů není tak neoptimální jak jsem si myslel, ale není to ani tak ideální jak jste tvrdil.
map
, občas dělá něco jiného než by od něj člověk čekal
PID RSS VSZ CMD 30214 83904 87972 perl -e @keys = map chr(ord("a")+$_)x100, 0..25; for($i=0; $i<100000;$i++){push @list,{map +($keys[$_], undef), 0..25}}; 30218 83884 87964 perl -e @keys = 0..25; for($i=0; $i<100000;$i++){push @list,{map +($keys[$_], undef), 0..25}}; print "done\n"; sleep 10Pravdu asi máte vy.
PID RSS VSZ CMD 6271 109856 111536 perl -e @keys = 0..25; sub aaa { {map +($keys[$_], undef), 0..25}}; for($i=0; $i<100000;$i++){push @list,aaa }; print "done\n"; sleep 10takze pravda bude niekde uprostred, asi zalezi na konexte, kde sa pole vytvori. No nic, idem hladat, kde som sa to vlastne docital.
Děkuji za vyčerpávající odpověď. Člověk se stále učí
Možná jsem to blbě pochopil, ale není to tím, že používáš @seznam (tedy pole) místo %seznam (tedy hash)?
$a = 1; $b = 2; @seznam = ($a, $b);a chcete aby vystup bol
a = 1 b = 2?
$hash{a} = 1; $hash{b} = 2; # nezalezi na poradi while (my ($a, $b) = each %hash) { print $a, $b, "\n"; } # zalezi na poradi for (sort keys %hash) { print $_, $hash{$_}, "\n"; }
use Data::Dumper; my $radek = <>; my @array = my ($jmeno, $prijmeni, $telefon) = split ' ', $radek; print Data::Dumper->Dump(\@array, [qw(jmeno prijmeni telefon)])
Tiskni Sdílej: