Size: a a a

2021 October 10

VG

Vadim Goncharov in Modern::Perl
svref_2object еще объект создаст, разве нет?
источник

SZ

Sergey Zhmylove in Modern::Perl
Ну я просто показал, что оно там лежит и можно его оттуда достать. Так-то, svref_2obj это большой интерфейс, можно заюзать любой другой.
В конце концов, на xs это две строки, а если нет желания погружаться в xs, то можно просто взять (((struct xpv *)sv)->sv_any)->xpv_len_u.xpvlenu_len, а если нет типов, то sv_any * лежит в самом начале, а len вероятнее всего, по оффсету 24, эти структуры не менялись с 2012
источник

SU

Someone Unknown 🇭🇷... in Modern::Perl
Если прям упороться, то проще написать свой xs-модуль, который просто достаёт длину из SvPV, оптимальнее этого уже ничего невозможно придумать, мне кажется
источник

VG

Vadim Goncharov in Modern::Perl
зачем, если bytes уже есть
источник

SU

Someone Unknown 🇭🇷... in Modern::Perl
Но там грязновато. Флаги все эти
источник

VV

Vladimir Varlamov in Modern::Perl
Что там грязно? Могли сделать что-нибудь вроде  length($s, "bytes") или создать свою функцию, но решили просто обозначать контекст работы. Это правильное решение исходя из истории вопроса.
источник

a

allter in Modern::Perl
Интересно, зачем понадобилось считать число байт? Обычно сначала кодируют в эти байты, затем считают. Как-бы, термин UTF-X означает, что фактический формат юникода - это деталь реализации, поэтому подсчет байтов без явного кодирования - в любом случае хак.
источник

VV

Vladimir Varlamov in Modern::Perl
Гхм. Ну например если мы работаем не со строками, а бинарными данными. Эти байты условност. И архитектура наших вычислительных устройств, конечно. Этим можно пренебречь, но тогда это будет не эффективно. Выравнивай данные под процессорные функции и получай скорость.
источник

VV

Vladimir Varlamov in Modern::Perl
Перл заходит к вопросу со стороны символов. Не забываем зачем и кем был придуман.
источник

VV

Vladimir Varlamov in Modern::Perl
И когда самое важное. Во времена однобайтных кодировок.
источник

VG

Vadim Goncharov in Modern::Perl
все были придуманы в их времена, но не все нормально пережили внедрение уникода, в отличие от перла
источник

VV

Vladimir Varlamov in Modern::Perl
Это у автора вопроса нужно спросить зачем ему число байт в строках. Я уверен, что пациент неправильно подходит к своей задаче в общем, а нам транслирует какие-то частности уже.
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
да может ему надо в udp пакеты паковать, каждый не более 4кб
источник

VV

Vladimir Varlamov in Modern::Perl
@knutov расскажите, зачем вам считать байты?
источник

SZ

Sergey Zhmylove in Modern::Perl
Тут же написано: https://t.me/modernperl/197646
источник

VV

Vladimir Varlamov in Modern::Perl
Этот вопрос нам — интерпретация решения какой-то задачи. Какой? Больше масштаб нужен.
Скорее всего логи пишут и отгружают по файлам. Тогда если валидируют вывод (в UTF-8 vs utf8), то вопрос про эффективность быстрее bytes::length() как бы не стоит. И вообще может быть эффективнее спросить у операционки размер файла.
источник

NK

Nick Knutov Dobrohos... in Modern::Perl
Не надо додумывать того, чего нет )

Задача звучит именно так, как было описано.

Сконвертировать решение с записью в файл - тоже вариант решения, кстати, но количество сисколлов от stat, учитывая вложенность пути - ну такое. Bytes будет заведомо эффективнее.
источник

SZ

Sergey Zhmylove in Modern::Perl
Число сисколлов от вложенности пути не зависит :)
источник

NK

Nick Knutov Dobrohos... in Modern::Perl
Могу путать, но помню где-то большой пост о том как работает stat и что он и как перебирает по полному пути
источник

SZ

Sergey Zhmylove in Modern::Perl
vfs перебирает по полному пути, но это всё делается внутри одного сисколла. И на всех современных ос у нее есть кеш :)
источник