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

    −161

    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
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    sub hex_to_string
    {
        my ($res, $str, $i) = ("", shift, 0);
        $str =~ tr/A-Z/a-z/;
        while ($i < length($str))
        {
    	my $m = ord(substr($str, $i++, 1));
    	my $n = ord(substr($str, $i++, 1));
    	if ($m >= 48 && $m <= 57)
    	{
    	    $m -= 48;
    	}    
    	if ($m >= 97 && $m <= 102)
    	{
    	    $m = 10 + $m - 97;
    	}    
    	if ($n >= 48 && $n <= 57)
    	{
    	    $n -= 48;
    	}
    	if ($n >= 97 && $n <= 102)
    	{
    	    $n = 10 + $n - 97;
    	}
    	$res .= chr($m * 16 + $n);
        }
        
        $res = join("\n", split(/\r\n/, $res));
        return $res;
    }

    Печально, что силу регулярок недооценивают.
    sub hex_to_string($)
    {
    my $input_hex_data = shift;
    my $result = $input_hex_data;
    $result =~ s/([a-fA-F0-9][a-fA-F0-9])/chr(hex($1))/eg;
    return $result;
    }

    Запостил: antoha_by, 07 Июля 2011

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

    • а без регулярок неа?
      Ответить
      • это же перл
        Ответить
        • ему простим
          Ответить
          • в перле регулярки встроены в язык, они парсятся и компилируются уже при компиляции сырца, часть синтаксиса языка.

            вдобавок простые регулярные выражения перл заменяет на обычные строчные операции. поэтому извращатся со строчными операциями в перле не имеет смысла - регулярками и проще и так же эффктивно.

            на 5.14 код приведеный свыше можно переписать так:
            sub hex_to_string($)
            {
            return ($_[0] =~ s/([a-f0-9]{2})/chr(hex($1))/egri);
            }


            хотя все равно говно потому что даже и функцию для этого заводить не надо потому что совсем правильно это делается так:
            pack('H*',$input);
            Ответить
            • >поэтому извращатся со строчными операциями
              Может быть наоборот, обычно извращаются с регулярками?
              Ответить
              • ну это же регулярки: ими можно не только работу делать ;)
                Ответить
    • если бы ещё у регулярок синтаксис был человеческий, а не красноглазо-кулхацкерский
      Ответить
      • кратко, удобно, парсируемо и при некотором навыке понятно.
        "человеческий" синтаксис означал бы тот факт, что парсер был бы сложный и медленный.
        Конечно, вы сами можете придумать таковой и написать парсер или конвертор, но, боюсь, попытка эта подобна 1С
        Ответить
        • PEG
          Удобно, парсируемо, читабельно, по скорости рвёт регулярки в клочья.

          ПыСы: но, увы, почти никому не известно...
          Ответить
      • Наоборот синтаксис максимально понятен. Просто - это как выучить иероглифы, свиду ад, но на самом деле заменяет целые слова и когда ты набираешся опыта, то уже не можешь оторваться и кажется, что всё можно описать с помощью регулярок(иероглифов).
        Тоже самое и с английскими вставками в русский язык. Просто легче выразить, но не знающий их изливает горы непонимания.
        Ответить
        • неудачный пример с иероглифами. Даже китайский есть и то - традиционный и упрощенный.
          Ответить
          • > свиду
            > набираешся
            просто неудачный пост
            Ответить
            • Хорошая работа. А еще Вы забыли указать, что слово "Наоборот" является вводным и должно выделятся запятой.
              Ответить
              • запятые - это третий тетан
                сначала надо осилить связность предложений
                Ответить
          • Представьте себе, регулярные выражения тоже упрощаются.
            Но упрощения могут привести еще больше непонимания.
            Просто всё упирается в непонимание .i.
            Ответить
        • а регулярки - это наиболее естественная однострочная лаконичная форма записи шаблонов и правил
          Ответить
          • Джон Бакус ворочается в гробу
            Ответить
            • нет, он знает, что регекспы его не касаются
              Ответить
              • регэкспами описывать синтаксис - чудовищное ебланство
                Ответить
                • синтаксис - это немного сложнее. регулярки описывают только регулярные языки, а синтаксис - тут придется использовать иные грамматики
                  Ответить
                  • > регулярки описывают только регулярные языки
                    причём с завидной регулярностью
                    Ответить
    • показать все, что скрытоvanished
      Ответить

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