<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>