=()= / Говнокод #24884 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
#! /usr/bin/perl

use strict;
use warnings;

my %h1 = (one => 1, two => 2);
my %h2 = (three =>3 , four => 4);

sub h_uno { \%h1 }

sub h_multi {
    my %all = (%h1, %h2);

    \%all;
}

while (my ($k, $v) = each %{h_uno()}) {
    print "k=$k, v=$v\n";
}

# следующий цикл не завершится никогда
#while (my ($k, $v) = each %{h_multi()}) {
#    print "k=$k, $v=$v\n";
#}

Один из традиционных подколов собеседований на Perl вакансию.

https://www.linux.org.ru/forum/job/14518840

Запостил: Elvenfighter Elvenfighter, (Updated )

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

  • >>собеседований на Perl вакансию.
    >>09.10.2018
    воу
    Ответить
        • Ядерная зима, Пётр вышкребает засохшие крошки хлеба из своего кармана и смешивает их с высушенными тараканами, сошкребает конденсат с разбитого зеркала и устраивает себе пятничный ужин чтоб отпразновать очередную прожитую неделю. Настраивает самодельное радио на частоту, уровень шипения на которой хоть как-то позволяет разбирать слова. В эфире новость об очередной версии Perl 5.
          Ответить
            • Пятому перлу 20 лет. Кто, кто может похвастаться такой стабильностью?
              За 20 лет можно было изучить этот язык так, чтобы писать в одну строчку всё, что угодно, включая систему документооборота, нейросеть и трехмерную стрелялку.
              Ответить
                • Как это кому?
                  поддерживать проекты 1997-го года
                  Ответить
                    • А если серьезно то мне нравится перл.

                      У программиста есть потребность выябываца. Перл, руби и даже С++ эту потребность понимают. А питон и пхп -- нет.
                      Ответить
                • > Нахуй он кому всрался? Это как пасцал, только с бородой.

                  1. Perl: First Appeared December 18, 1987
                  2. Pascal: First appeared 1970

                  Да перл еще сопли на стенке пальцем размазывал, когда на пацкале уже говномесили забористый Ънтерпрайзный бойлерплейт
                  Ответить
              • > Кто, кто может похвастаться такой стабильностью?

                «Common Lisp» (стандарту уже 24 года). Есть куча довольно старого кода на нём, которая прекрасно компилируется новыми компиляторами и не требует никакой поддержки.
                Это вам не какой-нибудь «Rust».
                Ответить
                • Кстати, сишечкин код образца C89 тоже вполне
                  Ответить
                • Кто о чем, а Ромка о своём "Lisp".

                  Кстати, ты можешь везде писать
                  - Переведи на "Lisp".
                  - Поэтому я за "Lisp".
                  Ответить
                  • переписал на лисп, вот тебе последние 2 строки
                    )))))))))))))
                    ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                    Ответить
                    • Украден последний мегабайт программы управления ракетами, написанной на Лиспе. Он выглядит так:
                      ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                      ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                      ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                      ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                      ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                      ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                      ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                      ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                      ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                      ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                      ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                      ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                      ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                      ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                      ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                      ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                      ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                      Извините, остальная часть не влезла в 2к символов.
                      Ответить
                      • А вот то же на джаве
                        }
                                                                                        }
                                                                                       }
                                                                                      }
                                                                                     }
                                                                                   }
                                                                                 }
                                                                               }
                                                                             }
                                                                    }
                                                 }
                             }
                        }catch (Throwable e) {
                          LOG.error(e);
                        }
                        Ответить
                          • Преподавателю лафа - посадить кого-то переписывать с книги.
                            Ответить
                          • Как всё сложно! Именно поэтому я за "MySQL"! В нём столько цифр перенабирать с книги не нужно!
                            Ответить
                            • Поэтому я за "PHP". По нему вообще книга не нужна.
                              Ответить
                          • 4D5A —— это "MZ".
                            B409 —— это MOV AH, 09H (функция 09 —— вывод строки в сосноль).
                            CD21 —— это INT 21H.
                            B8014C —— это MOV AX, 4C01H (функция 4CH —— выход, код разврата 1).
                            За каким-то хером выводим фразу "This program cannot run in DOS mode". Нахрена DOS-stub в dll-файлах, если их всё равно никто не будет запускать как программу (их нужно переименовать в exe, чтобы в голом ДОС'е увидеть это сообщение)? Я бы этот stub сократил до CD20. Кстати, в "OS/2" у некоторых DLL так называемый DOS-stub полностью отсутствует и они начинаются не с "MZ", а сразу с "LX" или "NE".

                            5045 —— это "PE".
                            4C01 —— это "Intel 386" (32-битная программа).
                            Ответить
                            • Как всё сложно. Поэтому я за "PHP".
                              Ответить
                          • Украдено начало программы на "PHP":
                            <?php
                            error_reporting(0);
                            ini_set('display_errors', '0');


                            Поэтому я за "PHP".
                            Ответить
                    • лол

                      если заминусовать комментарий с рейтингом -999, то может получиться смешно
                      Ответить
  • Perl не умер, он просто вышел покурить.
    Когда я работал на заводе -- мы юзали Perl.
    И язык этот во сто крат интересней всяких там педонов.

    Поясни, почему петля будет бесконечной?
    Ответить
    • >>Когда я работал на заводе
      сварщиком?
      Ответить
        • >>Работа токарем-универсалом. Настройка станка, настройка инструментов. Написание программ
          >> для изготовления деталей.
          Контроль качества изготавливаемых деталей.

          То-есть ты админ/программер/QAщик?
          Ответить
      • Чото не зырю я ничего криминальноготут

        Ну окей, each создает итератор и хранит его внутри хеша, отсюда две проблемы:
        1) нельзя удалять и изменять данные посреди итерации (так-то в жабе например тоже нельзя)
        2) не реентерабельный

        Ну то есть ужас, но уж никак не ужас-ужас-ужас.
        Ответить
  • use strict;
    use warnings;
    use LWP;
    
    my $ua = LWP::UserAgent->new(); 
    my $url = "http://govnokod.xyz/_18591/trackback/";
    
    my %form_init = (
    	url => "http://goatse.cx/",
    	title => "zaebal",
    	blog_name => "zaebal :)",
    	excerpt => "zaebal :-/"
    );
    while (1) {
    	my $i = int(rand(250000));
    	my %form = %form_init;
    	$form{title} .= $i;
    	$form{url} .= $i;
    	$form{blog_name} .= $i;
    	my $response = $ua->post( $url, \%form ); 
    	my $content = $response->as_string();
    }
    Ответить
  • unblessed oop, lal
    use strict;
    use warnings;
    
    sub createDog {
    	my %args = @_;
    	my $this = {
    		name => $args{name},
    		size => "huge",
    	};
    	$this->{'talk'} = sub {
    		$this->{'size'} eq 'huge' ? "rrraf" : "mimi";
    	};
    	return $this;
    };
    
    my $dog = createDog(name => "Sparky");
    printf "Dog named %s says %s\n", $dog->{'name'}, &{$dog->{'talk'}}();
    $dog->{'size'} = "small";
    printf "Dog named %s says %s\n", $dog->{'name'}, &{$dog->{'talk'}}();
    Ответить
  • Я слегка упростил твой пример, но смысл остался в том же.
    sub h_multi {
        print("Creating new hash\n");
        { "A", "B" }
    }
    
    # следующий цикл не завершится никогда
    while (my ($k, $v) = each %{&h_multi()}) {
        print "k=$k, $v=$v\n";
    }


    ``h_multi`` каждый раз создает новый хеш и возвращает на него ссылку.
    Почему ссылку?
    Мы обязаны это делать, так как вернуть из функции можно только скаляр (хеш вернуть нельзя, а ссылка на него это скаляр).

    ``each`` создает итератор и привязывает его к хешу. Это сильно отличается от того, как устроены итераторы в других языках, но похоже на то, как работает указатель внутри открытого файла.

    Просто представьте себе что внутри хеша есть указатель на ключ, следующий each сдвигает его на следующий ключ, и так до конца.

    Однако ``each`` вычисляет значение выражения каждый раз, когда дергается цикл.
    Соответственно, каждый раз вызывается ``h_multi``, который создает новый хеш с указателем на первый элемент.
    ``each`` его считывает, двигает дальше, получает новый хеш, его тоже читает, снова двигает, и так до бесконечности.

    Q: почему $k разные в разных итерациях?
    A: потому что hash не сортирован, это не массив
    Q: почему работает h_uno?
    A: потому что там возвращается ссылка на уже существующий хеш %h1, в ``h_multi`` создает новый хеш посредством слияния h1 и h2.
    Q: чтобля?
    A: в списковом контексте хеш выдает список ключ-значение. Несколько списков в списке сливаются (a,b,c,d) = ((a,b),c,d). Получившийся список при приведении к хешу заполняет его ключами из начениями (для примера выше a=>b, c=>d).

    Кокок, я прошел собеседование?
    Ответить
    • зы:
      ну и конечно же вот верная версия
      my %h1 = (one => 1, two => 2);
      my %h2 = (three =>3 , four => 4);
      
      sub h_uno { \%h1 }
      
      sub h_multi {
          my %all = (%h1, %h2);
      
          \%all;
      }
      
      while (my ($k, $v) = each %{h_uno()}) {
          print "k=$k, v=$v\n";
      }
      
      # следующий цикл завершится всегда
      my %fixed_by_petuh = %{h_multi()}; # вызовется один раз, сохраним хеш на стеке
      while (my ($k, $v) = each %fixed_by_petuh) {
         print "k=$k, $v=$v\n";
      }


      либо
      # следующий цикл завершится всегда
      my $fixed_by_petuh = h_multi();# сохраним ссылку на тот же хеш
      while (my ($k, $v) = each %$fixed_by_petuh) {
         print "k=$k, $v=$v\n";
      }
      Ответить
    • На должность интернет-клоуна?
      Ответить

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8