Size: a a a

2021 April 01

AP

Anton Petrusevich in Modern::Perl
Roman
В начале каждого модуля ставь:
use warnings;
use strict;

Иначе Перл так и будет для тебя загадочной хренью. Без ограничений и ругани он очень многое делает "интуитивно".
не только модуля, любого сорца
источник

AP

Anton Petrusevich in Modern::Perl
можно оптимизировать типа
$ perl -MData::Dumper -E '%i=(s=>1,b=>3); %j=%i; %k=(b=>4,c=>5); if(grep {!exists $i{$_}} keys %j or grep {!exists $j{$_}} keys %i){ say "different"}else {say "identical"} if (grep {!exists $i{$_}} keys %k or grep {!exists $k{$_}} keys %i) { say "different"}else {say "identical"}  '
identical
different
источник

SZ

Sergey Zhmylove in Modern::Perl
Anton Petrusevich
ну так греп и есть цикл. два грепа - два цикла.
У меня быстрее:
источник

SZ

Sergey Zhmylove in Modern::Perl
@PerlBanjoBot sub hcmp { return unless %{$_[0]} == %{$_[1]};return not grep {not exists $_[0]->{$_} } keys %{$_[1]}}

my %h1 = (1..4);
my %h2 = (1..6);
my %h3 = (3,4,1,2);

warn hcmp(\%h1, \%h2);
warn hcmp(\%h3, \%h2);
warn hcmp(\%h3, \%h1);
источник

P

PerlBanjoBot in Modern::Perl
Sergey Zhmylove
@PerlBanjoBot sub hcmp { return unless %{$_[0]} == %{$_[1]};return not grep {not exists $_[0]->{$_} } keys %{$_[1]}}

my %h1 = (1..4);
my %h2 = (1..6);
my %h3 = (3,4,1,2);

warn hcmp(\%h1, \%h2);
warn hcmp(\%h3, \%h2);
warn hcmp(\%h3, \%h1);
Warning: something's wrong at script.pl line 15.
Warning: something's wrong at script.pl line 16.
1 at script.pl line 17.
https://PerlBanjo.com/784b97fd2c
источник

SZ

Sergey Zhmylove in Modern::Perl
В один проход
источник

VV

Vladimir Varlamov in Modern::Perl
источник

SZ

Sergey Zhmylove in Modern::Perl
Ужасно, ещё и память жрёт
источник

AP

Anton Petrusevich in Modern::Perl
%{$_[0]} == %{$_[1]} — разворачивание во временный список типа быстрее?
источник

AP

Anton Petrusevich in Modern::Perl
ну и ты проверил грепом только один
источник

SZ

Sergey Zhmylove in Modern::Perl
Anton Petrusevich
%{$_[0]} == %{$_[1]} — разворачивание во временный список типа быстрее?
Это не временный список
источник

AP

Anton Petrusevich in Modern::Perl
сорри, да, это количество элементов
источник

SZ

Sergey Zhmylove in Modern::Perl
Это хеш в скалярном нумерик контексте
источник

AP

Anton Petrusevich in Modern::Perl
я понял идею
источник

AP

Anton Petrusevich in Modern::Perl
если размеры равны, то один не может включать другой, кроме как они идентичны
источник

SZ

Sergey Zhmylove in Modern::Perl
Anton Petrusevich
если размеры равны, то один не может включать другой, кроме как они идентичны
Ага
источник

AP

Anton Petrusevich in Modern::Perl
блин, помню был модуль типа лист-утил, но для хешей
источник

YK

Yegor K in Modern::Perl
Sergey Zhmylove
@PerlBanjoBot sub hcmp { return unless %{$_[0]} == %{$_[1]};return not grep {not exists $_[0]->{$_} } keys %{$_[1]}}

my %h1 = (1..4);
my %h2 = (1..6);
my %h3 = (3,4,1,2);

warn hcmp(\%h1, \%h2);
warn hcmp(\%h3, \%h2);
warn hcmp(\%h3, \%h1);
для больших хэшей вместо grep-a можно взять List::Util::first
источник

AP

Andrei Protasovitski in Modern::Perl
Ольга Мальцева
всем привет. туплю нещадно как на перле написать сравнение ключей в двух словарях?
           if ((keys(%interfaces->{$port}->{'comp_cfg'})) == (keys(%interfaces->{$pair_port}->{'comp_cfg'})) ){

вот так меня скрипт не понял, хотя идеешка не ругается
источник

SZ

Sergey Zhmylove in Modern::Perl
Yegor K
для больших хэшей вместо grep-a можно взять List::Util::first
Для больших хешей надо так:
источник