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

    +1

    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
    #!/usr/bin/perl
    
    # Fetch all JS from govno
    use strict;
    use warnings FATAL => 'all';
    use LWP;
    
    my $res = LWP::UserAgent->new->request(HTTP::Request->new("GET" => "http://govnokod.xyz/"));
    die "Failed: " . $res->code unless $res->is_success;
    
    for (split /\n/, $res->content) {
        print if /<script/ ... /script>/ and !m/[<>]/;
    }

    кууик.

    Официальный тред для ржания над пятым перлом

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

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

    • кууик
      перл
      Ответить
    • #!/usr/bin/php тоже сработает?
      Ответить
      • Из-под cmd.exe вряд ли.
        Ответить
        • При чем тут cmd.exe?
          Ответить
          • При том, что в нём вообще шебанг игнорируется.

            Первоначальный вопрос про что? Какие начальные условия?
            Ответить
            • Можно ли исполняемые скрипты на "PHP" таким же образом писать? На прыщах, естественно.
              Ответить
              • Можно. Именно поэтому я за "Прыщи"
                Ответить
                • И как прыщи понимают что нужно передать программе? Или просто всё в stdin?
                  Ответить
                  • А, наверное просто /usr/bin/pitux script.ptx делают. Но что, если в моём языке комментарий не с # начинается?
                    Ответить
                    • Exactly. Можно даже написать  /usr/bin/nemyx --huj --pizda --script если нужны доп. параметры. Кстати, хороший вопрос, а есть ли прыщескриптоязык, где решетка - не коментарий. Сходу не могу такой припомнить.
                      Ответить
                    • Хотя с "PHP" всё еще интереснее.
                      Соснольный скрипт на "РНР" выглядит следующим образом
                      #!/usr/bin/php
                      <?php
                      echo 'Hello';

                      И, по идее, "PHP" всё, что находится до тега, должен был бы высрать на экран. Но он в данном случае делает исключение ТОЛЬКО для первой строки ТОЛЬКО начинающейся на "#!". Так что скрипт вида
                      #! trololo
                      <?php $x = 42; ?>
                      #! azaza

                      выведет на экран только "#! azaza"

                      Именно поэтому я за "PHP".
                      Ответить
                      • В ноде джейсоне похоже так же. Там нету комментария с решеткой, но шебанг написать можно.
                        Ответить
                      • Ахахахаха
                        https://ideone.com/rHUQqD
                        Ахахахах
                        Так это не только в баше так, лоооол
                        Ответить
                        • https://ideone.com/fD9dHP

                          #! <?php echo "Imenno poetomu 
                          ya za "PHP".
                          Ответить
                        • Ideone исполняет «PHP» через «php-cli» — специальный соснольный интерпретатор, который совместим с «башем», поэтому вырезает первую строку, если она начинается на #.

                          В «FastCGI» и в апачевском модуле может не получиться, нужно проверять.
                          Ответить
                          • какойже ебаный костыль
                            Ответить
                          • Там всё, конечно, интереснее, это же "PHP". На самом деле это зависит от SAPI:
                            * cli -- скипает шебанк
                            * cgi -- какого-то хуя настраивается в небезызвестном PHP.IИI https://www.php.net/manual/ru/ini.core.php#ini.cgi.check-shebang-line
                            * остальные -- не обрабатывают шебанг.

                            (могу ошибаться, лишь бегло почитал исходники)
                            Ответить
                            • > какого-то хуя настраивается
                              а какое поведение ты бы сделал по умолчанию?
                              Ответить
                      • Всё дело в том, что скиптовые языки, где к комментарии отличны от "#" просто-напросто не нужны
                        Ответить
                        • Так в пхп решетка - это комментарий. Поэтому он нужен? Но с начала первой строки он невозможен.
                          Ответить
                          • В PHP так же есть комментарий / и /*
                            следовательно, он не нужен
                            Ответить
                            • В питоне есть комментарии """ """ - это вообще пиздец.
                              Ответить
                              • Ну это для докстрок обычно.

                                А в луа есть коментарии
                                --
                                как в SQL:)
                                Ответить
                                • Это для любых строк. Кстати, чем отличаются ''' и """?
                                  Ответить
                                  • """ многосточные емнип, и их можноиспользовать как докстроки

                                    для строковых литералов """ нужны чтобы не городить document here


                                    """
                                    This module does nothing.
                                    
                                    Author: Petuh <[email protected]>
                                    Version: 1.0
                                    """
                                    
                                    
                                    def do_nothing():
                                        """
                                        This function does nothing
                                        :return: nothing
                                        """
                                        nothing = "one liner"
                                        nothing += """
                                        
                                        yey
                                        
                                        
                                        """
                                        print(nothing)
                                    Ответить
                              • Но это и не комментарий вовсе, я многострочный строковый литерал. Можно написать
                                huj = """
                                pizda
                                """

                                и оно будет работать. Как Гвидо додумался туда пихать док-блоки - питух его знает...

                                То ли дело руби с его
                                =begin
                                =end

                                Мало того, что сам по себе уёбский многобуквенный синтаксис, так еще это говно не работает, если в начале поставить пробел. Больше ни у кого такого уебанства нет, наверное.
                                Ответить
                                • > Больше ни у кого такого уебанств

                                  угадай с одного раза откуда руби взяло весь свой отличный синтаксис
                                  https://perldoc.perl.org/perlpod.html
                                  Ответить
                                • Z pf lua
                                  huj = [[
                                  pizda
                                  ]]
                                  Ответить
                                  • зпф, да
                                    --[[
                                      Useful fun
                                    --]]
                                    function useful()
                                      return [[
                                      jello
                                      wrold
                                      ]]
                                    end
                                    
                                    print(useful())
                                    Ответить
                  • Вот это вот всё равносильно тому, как если бы у тебя в «Windows» был bat-файл:
                    @perl.exe pituh.pl %*


                    «Баш» извлекает из строки, начинающейся на #! имя интерпретатора, передаёт ему все аргументы, которые были переданы оригинальному файлу, а стандартные потоки ввода-вывода (stdin, stdout, stderr) наследуются так же, как и при запуске из bat-файла.

                    Задача со звёздочкой: придумать скрипт-полиглот, который в «Windows» можно запустить как bat-файл, чтобы он вызвал интерпретатор другого скриптового языка, и чтобы этот интерпретатор исполнил его без ошибки.
                    Ответить
                    • только конечно не баш, а ядро в своем вызове execv или в либлиотечной функции execve
                      Ответить
                      • Это вот прямо на уровне execv работает? И при замене баша на другой *sh тоже будет работать?

                        Мне как пользователю «Windows» это непривычно. В «Windows» есть CreateProcess, который умеет запускать экзешники и больше ничего, и есть ShellExecute, который умеет сканировать ассоциации файлов в реестре и запускать интерпретатор. Я уже смирился с тем, что для автоматизации нужен лишний слой.
                        Ответить
                        • >Это вот прямо на уровне execv работает?
                          читни манца
                          http://man7.org/linux/man-pages/man2/execve.2.html#NOTES

                          >И при замене баша на другой *sh тоже будет работать?
                          Разумеется.
                          Может вообще без шела работать.

                          Допустим, загружается машина с sysv init скриптами (/etc/init/rc.3/..) или с rc скриптами в духе bsd (/etc/rc) или slackware.

                          Эти скрипты запускает init, а не sh.
                          Вот пример
                          https://www.freebsd.org/doc/en_US.ISO8859-1/articles/rc-scripting/rcng-dummy.html

                          И они работают:) Кстати, баша на бздях нету

                          Про винду ты прав: CreateProcess ничего такого не умеет, и потому даже "Run as administrator" для элевации надо делать через ShellExecute

                          Зато в ShellExecute можно открыть вообще даже вовсе и не файл, а объект по GUIDу
                          Ответить
              • https://en.wikipedia.org/wiki/Shebang_(Unix)

                >3) Shell scripts can be set-user-ID.

                лолшто
                Ответить
                • https://ru.wikipedia.org/wiki/Suid

                  Атрибут есть такой в никсах у файлов, которые можно запускать. Если атрибут сброшен, то процесс создастся от имени того, кто запустил. Если атрибут установлен, то процесс создастся от имени владельца файла (если владелец root, то программа получит право распидорасить систему).
                  Ответить
                  • спасибо, капитан,но

                    http://man7.org/linux/man-pages/man2/execve.2.html#NOTES
                    Linux (like most other modern UNIX systems) ignores the set-user-ID
                    and set-group-ID bits on scripts.

                    впрочем, в BSD видимо этоработало

                    прыщебляди соснули
                    Ответить
    • вот вам головоломочка
      my @words;
      sub foo :lvalue {
          $words[@words];
      }
      
      &foo(1) = "hello";
      &foo(2) = "world";
      
      print join " ", @words; #Print "hello world"

      угадайте, как оно работает
      Ответить
      • Мы не обязаны знать язык для прыщеблчдей.
        Ответить
        • Кстати, ты совершенно прав. Если есть в мире язык именно для красноглазых, то это перл:)
          Ответить
          • my @ROOSTERS = qw/stertor syoma oslik sooslik poukan webkill/;
            
            
            sub fucking {
                $a cmp $b;
            }
            
            sub trying {
                "Cant sort roosters";
            }
            
            
            print join " ", sort fucking (@ROOSTERS) or die trying;

            DSL вмоем пирле
            Ответить

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