Singularity (YouTube) je nejnovější otevřený film od Blender Studia. Jedná se o jejich první 4K HDR film.
Vyšla hra Život Není Krásný: Poslední Exekuce (Steam, ProtonDB). Kreslená point & click adventura ze staré školy plná černého humoru a nekorektního násilí. Vžijte se do role zpustlého exekutora Vladimíra Brehowského a projděte s ním jeho poslední pracovní den. Hra volně navazuje na sérii Život Není Krásný.
Společnost Red Hat představila Fedora Hummingbird, tj. linuxovou distribuci s nativním kontejnerovým designem určenou pro vývojáře využívající AI agenty.
Hru The Legend of Zelda: Twilight Princess od společnosti Nintendo si lze nově díky projektu Dusklight (původně Dusk) a reverznímu inženýrství zahrát i na počítačích a mobilních zařízeních. Vyžadována je kopie původní hry (textury, modely, hudba, zvukové efekty, …). Ukázka na YouTube. Projekt byl zahájen v srpnu 2020.
Byla vydána nová major verze 29.0 programovacího jazyka Erlang (Wikipedie) a související platformy OTP (Open Telecom Platform, Wikipedie). Detailní přehled novinek na GitHubu.
Po zranitelnostech Copy Fail a Dirty Frag přichází zranitelnost Fragnesia. Další lokální eskalace práv na Linuxu. Zatím v upstreamu neopravena. Přiřazeno ji bylo CVE-2026-46300.
Sovereign Tech Agency (Wikipedie) prostřednictvím svého fondu Sovereign Tech Fund podpoří KDE částkou 1 285 200 eur.
Google na včerejší akci The Android Show | I/O Edition 2026 (YouTube) představil celou řadu novinek: Gemini Intelligence, notebooky Googlebook, novou generaci Android Auto, …
Evropská komise by do léta mohla předložit návrh normy omezující používání sociálních sítí dětmi v zájmu jejich bezpečí na internetu. Prohlásila to včera předsedkyně EK Ursula von der Leyenová, podle níž řada zemí Evropské unie volá po zavedení věkové hranice pro sociální sítě. EU částečně řeší bezpečnost dětí v digitálním prostředí v již platném nařízení o digitálních službách (DSA), podle německé političky to však není dostatečné a
… více »Multiplatformní open source aplikace scrcpy (Wikipedie) pro zrcadlení připojeného zařízení se systémem Android na desktopu a umožňující ovládání tohoto zařízení z desktopu, byla vydána v nové verzi 4.0.
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.
.
Diky moc
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 10
Zdá se, že máte pravdu, takže zůstavá už jen ten ždibíček rychlosti.
Vždyť jsem vytvářel milion odkazů na tentýž hash a totéž pole a to je samozřejmě stejné. Takže perl to vážně nedělá, ale pokaždé uloží nové klíče:$ 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 10
Ten 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 10
Pravdu 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 10
takze 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: