1. Perl / Говнокод #13671

    −158

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    sub get_number_from_possible_b64
    {
            my $s = shift;
    
            my $rv = $s;
    
            if( $s =~ /^\d+$/ )
            {
                    $rv = int( $s );
    
            } elsif( $s =~ /=$/ )
            {
                    $rv = decode_base64( $rv );
            }
    
            return $rv;
    }

    Где-то есть что-то, что либо цифорка, либо строка, оканчивающаяся на знак равенства.

    Запостил: kainwinterheart, 27 Августа 2013

    Комментарии (10) RSS

    • а почему вообще нет уверенности, что формат точен?
      Ответить
      • Думаю, что это скорее всего сочли избыточным. Либо где-то после вызова поставили assert и этим успокоились.
        Ответить
    • > строка, оканчивающаяся на знак равенства
      Но ведь бейс 64 не всегда заканчивается знаками =. Это всего лишь паддинг...
      Ответить
    • А не проще было поймать последовательность цифр и конвертнуть ее в инт, а не проверенную строку?
      И зачем инициализировать $rv строкой? магия?
      Ответить
    • Зачем тут регулярки вообще?
      use strict;
      use warnings FATAL => 'all';
      use Scalar::Util qw(looks_like_number);
      
      
      sub is_num_or_eq {
          my $last = substr $_[0], -1;
          if (looks_like_number $last) {
              'num';
          }
          elsif ($last eq '=') {
              'eq';
          }
          else {
              'neither';
          }
      }
      
      
      print is_num_or_eq 'a';            #neither
      print is_num_or_eq '3';            #num
      print is_num_or_eq 'asdasdasasd='; #eq
      Ответить

    Добавить комментарий