Debian dnes slaví 32 let. Ian Murdock oznámil vydání "Debian Linux Release" 16. srpna 1993.
Policisté zadrželi odsouzeného drogového dealera Tomáše Jiřikovského, který daroval ministerstvu spravedlnosti za tehdejšího ministra Pavla Blažka (ODS) bitcoiny v miliardové hodnotě, a zajistili i darovanou kryproměnu. Zadržení Jiřikovského může být podle ministerstva důležité k rozuzlení kauzy, která vypukla koncem května a vedla ke konci Blažka. Zajištění daru podle úřadu potvrzuje závěry dříve publikovaných právních
… více »Administrativa amerického prezidenta Donalda Trumpa jedná o možném převzetí podílu ve výrobci čipů Intel. Agentuře Bloomberg to řekly zdroje obeznámené se situací. Akcie Intelu v reakci na tuto zprávu výrazně posílily. Trump minulý týden označil Tana za konfliktní osobu, a to kvůli jeho vazbám na čínské společnosti, čímž vyvolal nejistotu ohledně dlouholetého úsilí Intelu o obrat v hospodaření. Po pondělní schůzce však prezident o šéfovi Intelu hovořil příznivě.
Společnost Purism stojící za linuxovými telefony a počítači Librem má nově v nabídce postkvantový šifrátor Librem PQC Encryptor.
VirtualBox, tj. multiplatformní virtualizační software, byl vydán v nové verzi 7.2. Přehled novinek v Changelogu. Vypíchnou lze vylepšené GUI.
Eric Migicovsky, zakladatel společnosti Pebble, v lednu oznámil, že má v plánu spustit výrobu nových hodinek Pebble s již open source PebbleOS. V březnu spustil předprodej hodinek Pebble Time 2 (tenkrát ještě pod názvem Core Time 2) za 225 dolarů s dodáním v prosinci. Včera představil jejich konečný vzhled (YouTube).
Byla oznámena nativní podpora protokolu ACME (Automated Certificate Management Environment) ve webovém serveru a reverzní proxy NGINX. Modul nginx-acme je zatím v preview verzi.
Vývojáři KDE oznámili vydání balíku aplikací KDE Gear 25.08. Přehled novinek i s náhledy a videi v oficiálním oznámení.
Společnost Perplexity AI působící v oblasti umělé inteligence (AI) podala nevyžádanou nabídku na převzetí webového prohlížeče Chrome internetové firmy Google za 34,5 miliardy dolarů (zhruba 723 miliard Kč). Informovala o tom včera agentura Reuters. Upozornila, že výše nabídky výrazně převyšuje hodnotu firmy Perplexity. Společnost Google se podle ní k nabídce zatím nevyjádřila.
Intel vydal 34 upozornění na bezpečnostní chyby ve svých produktech. Současně vydal verzi 20250812 mikrokódů pro své procesory řešící 6 bezpečnostních chyb.
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
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: