Size: a a a

2020 December 23

IB

Ivan Bessarabov in use Perl or die;
=)
источник

IB

Ivan Bessarabov in use Perl or die;
что тут интересно? мне кажется — совершенно ожидаемый вывод
источник

АК

Алексей Клименко... in use Perl or die;
А, он количество элементов выводит что ли?
источник

Тм

Товарищ майор... in use Perl or die;
а хотели бакеты посмотреть, убери scalar
источник

АК

Алексей Клименко... in use Perl or die;
Блин, это же не реф…
источник

VG

Vadim Goncharov in use Perl or die;
Алексей Клименко
А, он количество элементов выводит что ли?
не всегда
источник

IB

Ivan Bessarabov in use Perl or die;
Товарищ майор
а хотели бакеты посмотреть, убери scalar
если убрать scalar, то он выдвет все содержимое хеша
источник

VG

Vadim Goncharov in use Perl or die;
If you evaluate a hash in scalar context, it returns a false value if the hash is empty.  If there are any key/value pairs, it returns a true value.  A more precise definition is version dependent.

      Prior to Perl 5.25 the value returned was a string consisting of the number of used buckets and the number of allocated buckets, separated by a slash.  This is pretty much useful only to find out whether Perl's internal hashing algorithm is performing poorly on your data set.  For example, you stick 10,000 things in a hash, but evaluating %HASH in scalar context reveals "1/16", which means only one out of sixteen buckets has been touched, and presumably contains all 10,000 of your items.  This isn't supposed to happen.

      As of Perl 5.25 the return was changed to be the count of keys in the hash. If you need access to the old behavior you can use "Hash::Util::bucket_ratio()" instead.

(с) man perldata
источник

Тм

Товарищ майор... in use Perl or die;
oh..
источник
2020 December 24

AP

Anton Petrusevich in use Perl or die;
Ivan Bessarabov
Попробовал. У меня получается что в такой ситуации запись в массив в 10 раз быстрее чем запись в хеш, а чтение из массива в 2 раза быстрее чем чтение из хеша

* https://gist.github.com/bessarabov/4f6f7fd23cf447941072dad3165498aa
* https://gist.github.com/bessarabov/9c4c7d996898df044df5b90406f1da08

Если возможно — давайте на "ты"?
в три раза на записи у меня вышло, если не пересоздавать хеш и массив. 5.26.
источник

AP

Anton Petrusevich in use Perl or die;
         Rate  hash array
hash   6761/s    --  -65%
array 19247/s  185%    --
источник

AP

Anton Petrusevich in use Perl or die;
про твой вариант с чтением в два раза спорить не буду
источник

AP

Anton Petrusevich in use Perl or die;
меня больше интересовало чтение, поскольку речь была про использование хеша или массива для блесса
источник

SZ

Sergey Zhmylove in use Perl or die;
Ivan Bessarabov
Разверни, мысль, пожалуйста. Я не понимаю тебя.

написал

       hash => sub {
           my %h;

           keys(%h) = 1000;

           foreach my $i (@indexes) {
               $h{$i} = $i;
           }
           warn scalar %h;
       },


это выводит кучу строк вида

945 at perl_benchmark_array_hash_write.pl line 32.
945 at perl_benchmark_array_hash_write.pl line 32.
945 at perl_benchmark_array_hash_write.pl line 32.
945 at perl_benchmark_array_hash_write.pl line 32.
945 at perl_benchmark_array_hash_write.pl line 32.
945 at perl_benchmark_array_hash_write.pl line 32.
945 at perl_benchmark_array_hash_write.pl line 32.
Ебал я этот ваш перл, ей богу! https://PerlBanjo.com/7d2406ec25
источник

SZ

Sergey Zhmylove in use Perl or die;
Vadim Goncharov
If you evaluate a hash in scalar context, it returns a false value if the hash is empty.  If there are any key/value pairs, it returns a true value.  A more precise definition is version dependent.

      Prior to Perl 5.25 the value returned was a string consisting of the number of used buckets and the number of allocated buckets, separated by a slash.  This is pretty much useful only to find out whether Perl's internal hashing algorithm is performing poorly on your data set.  For example, you stick 10,000 things in a hash, but evaluating %HASH in scalar context reveals "1/16", which means only one out of sixteen buckets has been touched, and presumably contains all 10,000 of your items.  This isn't supposed to happen.

      As of Perl 5.25 the return was changed to be the count of keys in the hash. If you need access to the old behavior you can use "Hash::Util::bucket_ratio()" instead.

(с) man perldata
Спасибо
источник

VG

Vadim Goncharov in use Perl or die;
Sergey Zhmylove
Ебал я этот ваш перл, ей богу! https://PerlBanjo.com/7d2406ec25
да он такой один
источник

AK

Andrey Karepin in use Perl or die;
Sergey Zhmylove
Ебал я этот ваш перл, ей богу! https://PerlBanjo.com/7d2406ec25
источник

SZ

Sergey Zhmylove in use Perl or die;
Ну это ведь идиоматическое выражение, не буду
Да и тем более, они сломали старые скрипты. У меня ещё нет нигде 5.25+ скорее всего, а уже что-то поломано может быть после обновления. «обратная совместимость, да?»
источник

РТ

Роман Тихонов... in use Perl or die;
Sergey Zhmylove
Ну это ведь идиоматическое выражение, не буду
Да и тем более, они сломали старые скрипты. У меня ещё нет нигде 5.25+ скорее всего, а уже что-то поломано может быть после обновления. «обратная совместимость, да?»
Неужели этой извращённой конструкцией кто-то пользуется?
источник

IB

Ivan Bessarabov in use Perl or die;
Sergey Zhmylove
Ну это ведь идиоматическое выражение, не буду
Да и тем более, они сломали старые скрипты. У меня ещё нет нигде 5.25+ скорее всего, а уже что-то поломано может быть после обновления. «обратная совместимость, да?»
> Да и тем более, они сломали старые скрипты.
Реально у тебя где-то это используется в коде? Я думал что это штука чисто для дебага — вывел инфу на экран в супер важных местах во время разработки, понял что лучше бы заранее выделить побольше бакетов и убрал этот print из кода. У тебя реально что-то динамически делается на основании этих данных?
источник