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

    −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
    sub check_license {
        my ($license) = @_;
    
        my $is_valid = 0;
        if (-f $license) {
            open(my $fh, '<', $license);
            my $content = do { local $/ = undef; <$fh> };
            close($fh);
            $content =~ s/\r\n/\n/g;
    
            $is_valid = $content =~ /^-{5}BEGIN LICENSE-{5}$/m;
            $is_valid = $content =~ /^-{5}END LICENSE-{5}$/m;
        }
    
        return $is_valid;
    }

    Ну ок.

    Запостил: Elvenfighter, 29 Октября 2014

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

    • Я думаю что на строке 12 автор хотел сказать "$is_valid &=".

      Но тут ведь какая фишка?
      Во-первых автор не умеет многострочных регулярок (нафига две проверки?)
      Во-вторых регулярки тут вообще не нужны: perldoc index!! Не ради экономии нажатий на дефис же он это писал?
      В-третьих хороший IDE подсказал бы что переменную переписали не использовав (правда, для перла нет хороших IDE, потому что никто не знает что такое "хорошо" в перле)
      В-четвертых почему нет my? Куда use strict смотрит?
      В-пятых я вообще не понимаю зачем сейчас писать на перле?
      Ответить
      • > Я думаю что на строке 12 автор хотел сказать "$is_valid &=".
        &&= даже.

        > В-четвертых почему нет my? Куда use strict смотрит
        Четвёртая строчка

        Везде бы так лицензии валидировались :)
        Ответить
    • соптимизированый вариант:
      sub check_license {
        return 1;
      }
      Ответить
      • sub check_license { 1 }

        Кстати, в 5.12 появилась интересная фича:
        sub check_license { ... }

        http://perldoc.perl.org/perlsyn.html#The-Ellipsis-Statement
        Ответить
        • use constant check_license => 1;
          Ответить
        • > Кстати, в 5.12 появилась интересная фича:

          Честно говоря, они начали просто фигней страдать.

          Вместо того что бы работать над прикручиванием какого JIT, они просто feature-creep занимаются.
          Ответить
          • Единственный адекватный юзкейс -- это чисто виртуальные методы. Но какой смысл, если есть die.
            Ответить
          • зачем перлу джит? Кто-то пишет на нём хайлоад?

            нет, не так: скорость работы это основная причина почему на перле стали меньше писать?
            Ответить
            • в моём случае: и да и нет.

              если бы был джит, то расширилась бы сфера применения.

              несколько раз приходилось парсить двоичные данные - на чем перл просто немеряно тормозит. в смысле: для скриптового языка, производительность очень хорошая. но, на то что перлу было нужно 40 минут, С прога сделала за 15 секунд. (Перл, на системе где тестил, около 1М TLV триплетов в секунду обрабатывал. Очень хорошее время для скриптового языка.)

              та же петрушка с большими XML.

              но в общем случае тормозов инициализации JIT я тоже не хочу.
              что я хочу, это нечто типа:
              my $jitted_function = jit(\&function);  # JIT the function
              
              function(qw/bla bla bla/);
              $jitted_function->(qw/bla bla bla/);  # equivalent to the above, but calls JITed variant.
              Ответить
              • Нативные модули сильно тормозят? Маршалинг нужен?
                Ответить
                • > Нативные модули сильно тормозят?

                  Нативные модуля еще написать надо.

                  И это как бы сводит на ноль преимущества скрипта по сравнению с С программами.

                  > Маршалинг нужен?

                  Маршалинг^WСериализация это всего лишь частный случай. (И откуда вы это кривое слово "маршаллинг" только подцепили? Никто кроме Некрософта сериализацию так не называет.)

                  Общий паттерн: код делает много мелких операций. В текущем Перле это просто не поддаётся никакой оптимизации.
                  Ответить
                  • > Никто кроме Некрософта сериализацию так не называет.

                    google://java+marshalling
                    google://golang+marshalling

                    > И это как бы сводит на ноль преимущества скрипта по сравнению с С программами.

                    Одно дело пилить всё приложение на сишке, совсем другое - один изолированный модуль, ворочающий байты.
                    Ответить
                    • > > Никто кроме Некрософта сериализацию так не называет.

                      > google://java+marshalling

                      которые и есть почти все повально виндозники. QED.

                      > Одно дело пилить всё приложение на сишке, совсем другое - один изолированный модуль, ворочающий байты.

                      90% логики приложения на С + 10% бойлерплэйта на перле (как минимум три файла), по-моему опыту слегка хуже чем 100% pure С (один файл).
                      Ответить
                      • Всё зависит от размера приложения.

                        Если какой-нибудь тупой трансформатор/парвер данных, лучше на крестах/сях написать.

                        Если какой-нибудь серьёзный комбайн, особенно с генерацией каких-нибудь отчётов и записью в базу - часто проще модуль запилить. Хотя я плавно для тулов переезжаю на Go - шустрый и батарейки ништяшные.
                        Ответить
                  • >> Нативные модули сильно тормозят?
                    > И это как бы сводит на ноль преимущества скрипта по сравнению с С программами.
                    Тут или шашечки или ехать.

                    Но XS (нативные модули) в перле -- та еще наркомания. Вот, на затравку:
                    http://perldoc.perl.org/perlguts.html
                    http://perldoc.perl.org/perlxs.html
                    Ответить
                    • я уже в прошлом пару XS писал. поэтому и говорил из личного опыта.

                      если нужно просто переписать функцию на С то все относительно просто. (за исключением передачи параметров.)

                      если нужно больше - то там начинаются огороды, потому что документация и половины случаев не описывает. в добавок, дока подразумевает что ты знаешь внутренности перла.
                      Ответить
        • Хаскелевский undefined, теперь и в перле.
          Ответить

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