Size: a a a

2021 October 09

VV

Vladimir Varlamov in Modern::Perl
@mivanych если получите результат, то маякните, мне тоже что-то такое нужно будет
источник

МИ

Михаил Иванов... in Modern::Perl
Оке, спасибо!
источник

NK

Nick Knutov Dobrohos... in Modern::Perl
А как лучше получать длину юникодной строки в байтах?

Контекст - нечто генерируют строку добавляя к ней куски текста, надо прекратить, как только длина в байтах результата превысит заданный порог.

Гуглится только вариант постоянного енкоде/декоде или апгрейд/даунгрейд, что затратно по ресурсам на такое количество итераций.
источник

YM

Yuri Myasoedov in Modern::Perl
Вроде use bytes
источник

NK

Nick Knutov Dobrohos... in Modern::Perl
примеры тольк странные гуглятся, с заворачиванием в отдельную область
источник

YM

Yuri Myasoedov in Modern::Perl
Use of this module for anything other than debugging purposes is strongly discouraged.

как же я давно доку не открывал по этому модулю )
источник

NK

Nick Knutov Dobrohos... in Modern::Perl
но кажется use bytes ''; bytes::length() должно помочь
источник

NK

Nick Knutov Dobrohos... in Modern::Perl
ну и вот это тоже, да
источник

NK

Nick Knutov Dobrohos... in Modern::Perl
или надо делать use bytes + no bytes?
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
никак? или не работать вообще как со строкой?
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
еще вариант -- юзать апроксимацию и переходить к точным расчетам только вблизи границы
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
а, еще -- инкрементально считать
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
было 100 байт, добавили еще чанк на 15 байт -- просуммировали до 115 байт
источник

YM

Yuri Myasoedov in Modern::Perl
Из доки (https://perldoc.perl.org/5.34.0/bytes):

bytes::length() is admittedly handy if you need to know the byte length of a Perl scalar. But a more modern way is:
use Encode 'encode';
length(encode('UTF-8', $scalar))
источник

VG

Vadim Goncharov in Modern::Perl
оно небось по перформансу неэффективно
источник

VG

Vadim Goncharov in Modern::Perl
целый энкод сначала
источник

NK

Nick Knutov Dobrohos... in Modern::Perl
да, use bytes + no bytes норм работает. encode лень проверять, но кажется должно быть ресурсоемко.
источник

SU

Someone Unknown 🇭🇷... in Modern::Perl
Особенно на длинных строках
источник

SU

Someone Unknown 🇭🇷... in Modern::Perl
$ perl -MEncode -MBenchmark -E 'my$s="ы"x1e5;my$c=0;timethese(1e5,{encode=>sub{$c+=length(encode(utf8=>$s))},bytes=>sub{use bytes;$c+=bytes::length($s);no bytes}})'
Benchmark: timing 100000 iterations of bytes, encode...
    bytes:  0 wallclock secs ( 0.01 usr +  0.00 sys =  0.01 CPU) @ 10000000.00/s (n=100000)
           (warning: too few iterations for a reliable count)
   encode: 24 wallclock secs (16.76 usr +  6.78 sys = 23.54 CPU) @ 4248.09/s (n=100000)
источник

SZ

Sergey Zhmylove in Modern::Perl
@PerlBanjoBot $ echo привет |perl -lne print,length
источник