<div dir="ltr">Смотри-ка, люди срутся про синтаксис Перла, прям как в старые добрые времена. :)<br></div><br><div class="gmail_quote"><div dir="ltr">вт, 13 окт. 2015 г. в 21:49, Victor Efimov <<a href="mailto:victor@vsespb.ru">victor@vsespb.ru</a>>:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">13 октября 2015 г., 21:26 пользователь Victor Efimov <<a href="mailto:victor@vsespb.ru" target="_blank">victor@vsespb.ru</a>> написал:<br>
> 13 октября 2015 г., 21:16 пользователь Ilya Chesnokov<br>
> <<a href="mailto:chesnokov.ilya@gmail.com" target="_blank">chesnokov.ilya@gmail.com</a>> написал:<br>
>><br>
>> 13 октября 2015 г., 19:49 пользователь Olga Smirnova<br>
>> <<a href="mailto:o.smirnova@corp.mail.ru" target="_blank">o.smirnova@corp.mail.ru</a>> написал:<br>
>>><br>
>>> Тут, конечно, можно сказать, мол, просто не используйте Dumper (или любую<br>
>>> другую функцию, неявно преобразующую тип), но это не панацея, т.к. в любой<br>
>>> момент в проект может прийти новый человек, не знающий про эту фичу, который<br>
>>> возьмет да и начнет использовать одну из таких функций перед отправкой и все<br>
>>> нахрен поломается.<br>
>><br>
>><br>
>> Code review? Тесты? :)<br>
><br>
> да, у нас похожий код был и были тесты. сломать было нельзя.<br>
> однако если ты по всему коду за собой таскаешь некоторую структуру с<br>
> "числами" и вдруг добавление в любом месте логгирования этой струкруты<br>
> делает её не валдиной, тут тесты не помогут, вернее только 100%<br>
> покрытие и постоянно тест на то что число осталось числом (для чего,<br>
> мужду прочим нужен модуль B или тот же JSON::XS) на все все кейзы.<br>
> получается что если "число" поучаствует в строковой операции (как<br>
> readonly) (например print $number) без всякой ошибки или варнинга оно<br>
> превратится в "не число". это не в какие ворота не лезет.<br>
<br>
даже поясню ещё больше:<br>
<br>
вот допустим у тебя есть функция print_data_as_json<br>
она покрыта тестами. всё ок. числа там не портястся. отлично.<br>
<br>
затем ты пишешь новый код в рандомном месте проекта<br>
<br>
my $struct = { x => 42 };<br>
print_data_as_json($struct)<br>
<br>
всё окей.<br>
<br>
затем ты добавляещё ещё кода<br>
<br>
my $struct = { x => 42 };<br>
someanotherfunc($somedata, $struct)<br>
print_data_as_json($struct)<br>
<br>
всё.. приехали. теперь (учитывая что любое чтение поля x может его<br>
испортить) нужно добавить тест, гарантируюющий что<br>
<br>
someanotherfunc не "испортит" значение x в $somestruct для всех ветвлений.<br>
<br>
фактически это удваивает количество тестов (ассертов тестов) всего<br>
кода где структура с числом<br>
должна быть "живая" и оставаться числом.<br>
<br>
<br>
><br>
>><br>
>> --<br>
>> Best regards,<br>
>> Ilya Chesnokov<br>
>><br>
>> --<br>
>> Moscow.pm mailing list<br>
>> <a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
>><br>
--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
</blockquote></div>