<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">13 октября 2015 г., 19:49 пользователь Olga Smirnova <span dir="ltr"><<a href="mailto:o.smirnova@corp.mail.ru" target="_blank">o.smirnova@corp.mail.ru</a>></span> написал:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
Ни за ни против типизации, просто пример, когда строгая типизация
могла бы решить проблему простым способом<br></div></blockquote><div><br></div><div>Да, помогла бы, т.к. в JSON есть числа и boolean, а в perl их нет.<br> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000">
<br>
Примерно вот такой кусок кода:<br>
<br>
use JSON qw(to_json);<br>
use Data::Dumper;<br>
<br>
my $numbers = {<br>
one => 1.5,<br>
two => 2,<br>
};<br>
my $str = to_json( $numbers );<br>
print $str . "\n\n";<br>
<br>
my $str2 = Dumper($numbers);<br>
my $str3 = to_json( $numbers );<br>
<br>
print $str3 . "\n\n";<br>
<br>
Получаем вот такой вывод:<br>
<br>
{"one":1.5,"two":2}<br>
<br>
{"one":"1.5","two":2}<br></div></blockquote><div><br></div><div>Но кстати конкретно этот пример - это вообще другая тема, имхо, она за гранью добра и зла. В Perl нет чисел, однако Марк Леманн думает что есть. Это какие-то эфемерные "числа" которые не подпадают ни под какую-либо вменяемую парадигму. С такими "числами" perl не консистентен.<br></div><div>Я заводил ему тикет вот <a href="https://rt.cpan.org/Public/Bug/Display.html?id=94451">https://rt.cpan.org/Public/Bug/Display.html?id=94451</a> и ещё недавно писал письмо про точно такую же проблему как вы описываете (тоже числа после вывода в лог Dumper'ом или не Dumper'ом превращались в строки). Я хотел опцию чтобы это отключить, но оба раза он меня посылал.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000">
<br>
Т.е. берем структуру с заведомыми чиселками, которую нужно
преобразовать в json, затем применяем к ней какую-нибудь функцию, в
данном случае Dumper, и теперь наша дробная чиселка легким движением
руки превращается в строчечку при json-сериализации. Если бы была
строгая типизация, то такой проблемы бы не возникло.<br>
<br>
Конкретно у нас это стало проблемой, когда понадобилось посылать
внутри json'а сумму в рублях (соответственно, это дробная чиселка),
а на принимающей стороне был сервис, написанный на скале (т.е. со
строгой типизацей), валидатор которого ругался на наши "1.5" и
говорил, мол это не чиселка.<br>
<br>
Тут, конечно, можно сказать, мол, просто не используйте Dumper (или
любую другую функцию, неявно преобразующую тип), но это не панацея,
т.к. в любой момент в проект может прийти новый человек, не знающий
про эту фичу, который возьмет да и начнет использовать одну из таких
функций перед отправкой и все нахрен поломается.<br>
В нашем случае решением проблемы стал перевод единицы измерения
суммы из рублей в копейки и на нашей стороне и на принимающей
(благо, принимающий сервис тоже наш), т.е. избавление от дробных
чисел - перед отправкой для суммы всегда делался int и уже неважно
было, что делали с этой чиселкой раньше.<br>
<br>
С другой сторону, в пользу не строгой типизации - если бы такой json
(с "1.5") пришел в сервис, написанный на перле, то проблемы бы не
было - мы бы адекватно распарсили и 1.5 и "1.5"<br>
<br>
<br>
<div>13.10.2015 19:08, Victor Efimov пишет:<br>
</div><span class="">
<blockquote type="cite">
твой пример был про программиста, который написал
$b='20' с кавычками, а потом решил с переменной $b произвести
сложение.
это не вменяемый программист, даже по реальностям Perl5. он
присваивает переменной заведомо строковое значение прямо в
исходном
коде, зачем-то пишет кавычки,
а затем эту же переменную пытается складывать.
если у тебя какой-то xml парсер - то и приводи примеры xml
парсера. я
за то чтобы избавиться от абстракций в этом треде, тут и так полно
недопонимания. так что лучше пример кода обсужать
а не на пальцах пытаться что-то объяснить и демагогией заниматься.
</blockquote>
<br>
</span><div>-- <br>
<span style="color:rgb(75,74,69);font-style:italic">С уважением,<br>
<br>
Ольга Смирнова<br>
Perl-программист проекта Деньги@<a href="http://mail.ru" target="_blank">mail.ru</a><br>
раб.: +7 (495)-725-63-57 (внутр. 2199)<br>
моб.: +7 (926)-959-16-23<br>
e-mail: <a href="mailto:o.smirnova@corp.mail.ru" target="_blank">o.smirnova@corp.mail.ru</a><br>
skype: olga_smirnova89<br>
mail-agent: <a href="mailto:o.smirnova@corp.mail.ru" target="_blank">o.smirnova@corp.mail.ru</a><br>
ISQ: 232733122<br>
</span>
<br>
<a href="http://mail.ru" title="mail.ru" target="_blank"><img alt="mail.ru" src="cid:part2.00020405.01090605@corp.mail.ru"></a></div>
</div>
<br>--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
<br></blockquote></div><br></div></div>