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

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    # The API methods die when an error occurs.
    say $api->getMe->{result}{username};
    # ... but error handling is available as well.
    my $result = eval { $api->getMe }
        or die 'Got error message: ', $api->parse_error->{msg};

    https://metacpan.org/pod/WWW::Telegram::BotAPI

    Продолжаем пиздеть про перл.

    Решил выбрать предметную область "Телеграм-бот" чтобы поднатаскаться в «Perl».

    Вопрос: что за говно в оп-коде? Это говноспособ обработки ошибок предлагают, или такое распространено? Типа eval вместо try?

    Запостил: vistefan, 09 Июля 2020

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

    • >username
      barewords? и это работает с use strict?

      eval вместо try это нормальная практика, но если ты все равно собрался die, то зачем что-то ловить?
      Ответить
      • Чтобы показать своё сообщеие об ошибке.
        Ответить
        • vanished
          Ответить
          • > Чтобы показать своё сообщеие об ошибке.
            Ответить
            • Зачем? Зачем?
              Ответить
              • Чтобы показать своё сообщеие об ошибке.

                Например где-то при вычислении количества питушни в питушне происходит деление на зиро, и вместо того, чтобы говорит о каком-то хуй пойми чего-на-что делении я хочу сказать внятное, что мне не дали питушню.
                Ответить
                • Чтобы вместо: "Division by zero" было внятное "Can't divide number of users by zero" или например "Your system administrator tried to divide some number by zero, call him and ask what the fuck".
                  Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • > if $@ ne

                    Заебись, лооол

                    Всегда завидовал англоязычным людям, что мол для них имена сущностей и ключевые слова в языках, имена функций в либах — как-то роднее. И пожалуйста, вот тебе перл — иностранный агент — реализует буквально концепт ЕСЛИ НЕ из 1С )))
                    Ответить
                    • А ещё я люблю языки, в которых можно булям ставить знак вопроса в конце имени, и традицию именовать интерфейсы в джавке с префиксом IHave. I — это типа интерфейс, а читакется как IHaveDate, IHaveContracts или например IAmDisplayable, IAmPrintable.
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • А я как раз в джавовском проекте на работе её встретил. А больше нигде не видел.

                          Там основу фреймворка ещё до появления их зоопарка, разделения бэка и фронта в вебе на клиент и сервер, и вообще технологии «AJAX», писал очень писучий чувак, который потом ушел в яндекс, и у него как раз мог быть ЦППшный опыт, наверное подрезал фишку.
                          Ответить
                      • А мне нравится, когда таблицы обозначают префиксом «tbl», потому что читается как «ты».
                        Ответить
                        • tbl_pitux
                          Ответить
                        • Блядь. Нахуй ты это написал?
                          Ответить
                          • развидь
                            Ответить
                            • Есть ещё сокращение «Analytics» -> «Anal».
                              Ответить
                              • показать все, что скрытоvanished
                                Ответить
                              • /* meta */
                                typedef struct r_anal_meta_item_t {
                                	ut64 from;
                                	ut64 to;
                                	ut64 size;
                                	int type;
                                	int subtype;
                                	char *str;
                                	int space;
                                } RAnalMetaItem;
                                
                                typedef struct {
                                	struct r_anal_t *anal;
                                	int type;
                                	int rad;
                                	SdbForeachCallback cb;
                                	void *user;
                                	int count;
                                	struct r_anal_type_function_t *fcn;
                                } RAnalMetaUserItem;
                                
                                typedef struct r_anal_range_t {
                                	ut64 from;
                                	ut64 to;
                                	int bits;
                                } RAnalRange;
                                
                                #define R_ANAL_UNMASK_TYPE(x) (x&R_ANAL_VAR_TYPE_SIZE_MASK)
                                #define R_ANAL_UNMASK_SIGN(x) (((x& R_ANAL_VAR_TYPE_SIGN_MASK)>> R_ANAL_VAR_TYPE_SIGN_SHIFT)==R_ANAL_VAR_TYPE_UNSIGNED)?0:1
                                
                                #define R_ANAL_GET_OFFSET(x,y,z) \
                                	(x && x->binb.bin && x->binb.get_offset)? \
                                		x->binb.get_offset (x->binb.bin, y, z): -1
                                enum {
                                	R_ANAL_DATA_TYPE_NULL = 0,
                                	R_ANAL_DATA_TYPE_UNKNOWN = 1,
                                	R_ANAL_DATA_TYPE_STRING = 2,
                                	R_ANAL_DATA_TYPE_WIDE_STRING = 3,
                                	R_ANAL_DATA_TYPE_POINTER = 4,
                                	R_ANAL_DATA_TYPE_NUMBER = 5,
                                	R_ANAL_DATA_TYPE_INVALID = 6,
                                	R_ANAL_DATA_TYPE_HEADER = 7,
                                	R_ANAL_DATA_TYPE_SEQUENCE = 8,
                                	R_ANAL_DATA_TYPE_PATTERN = 9,
                                };
                                
                                // used from core/anal.c
                                #define R_ANAL_ADDR_TYPE_EXEC      1
                                #define R_ANAL_ADDR_TYPE_READ      1 << 1
                                #define R_ANAL_ADDR_TYPE_WRITE     1 << 2
                                #define R_ANAL_ADDR_TYPE_FLAG      1 << 3
                                #define R_ANAL_ADDR_TYPE_FUNC      1 << 4
                                #define R_ANAL_ADDR_TYPE_HEAP      1 << 5
                                #define R_ANAL_ADDR_TYPE_STACK     1 << 6
                                #define R_ANAL_ADDR_TYPE_REG       1 << 7
                                #define R_ANAL_ADDR_TYPE_PROGRAM   1 << 8
                                #define R_ANAL_ADDR_TYPE_LIBRARY   1 << 9
                                #define R_ANAL_ADDR_TYPE_ASCII     1 << 10
                                #define R_ANAL_ADDR_TYPE_SEQUENCE  1 << 11
                                
                                #define R_ANAL_ARCHINFO_MIN_OP_SIZE 0
                                #define R_ANAL_ARCHINFO_MAX_OP_SIZE 1
                                #define R_ANAL_ARCHINFO_ALIGN 2
                                #define R_ANAL_ARCHINFO_DATA_ALIGN 4
                                Ответить
                                • двайте форси ть слово "Свинокур"
                                  Ответить
                                  • Ты файку хотя бы забил бы, а потом форсил.
                                    Ответить
                                    • Сделай файку, да подари мне. Я тебе столько ников подарил, что уже издец
                                      Ответить
                                      • Ты мне не дарил, я сам спиздил.
                                        Ответить
                                        • Наконец ты это признал
                                          Ответить
                                          • Когдаже наконец ТЫ признаешь, что у тебя между ножек - проходной двор?
                                            Ответить
                          • В каком-то проекте встретилось, и теперь ты думаешь, что идентификаторы обращаются к тебе?
                            Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • Ну то есть у аргументов типов нет, типы есть у операторов. Если оператор строковый, то он может привести аргументы к строкам; если оператор числовой, то он может привести аргументы к числам.

                        Например, плюсик всегда складывает числа, а точка всегда кокококонкатенирует строки, поэтому такой питушни, как в «JS», когда приходится чесать репу, чтобы понять, что сделает плюсик, не бывает.

                        Так?
                        Ответить
                        • Кажется что да, именно так.

                          Можно чтать из файла и складывать, не надо кастить как питухонские делают
                          Ответить
                  • кстати, можно просто
                    die "Sorry, but $@" if $@;
                    ;
                    но критик ругается
                    Ответить
                    • кто такой критик?
                      Ответить
                      • Perl::Critic. Статический анализатор перлокода на основе парсера PPI и книги Конвея "Perl Best Practices".
                        Ответить
                        • Ты просто делаешь use, и он начинает в твоей программе статически анализировать при запуске? Как же это работает, и на какой стадии?
                          Ответить
                          • Будем считать что заванишил, вижу он юзается явно, ему кормишь файлы.
                            Ответить
      • >barewords? и это работает с use strict?
        мильпардон, всё работает.

        barewords нельзя вместо строковых тилиралов, а заместо ключей хеша это ок.
        Ответить
    • > Типа eval вместо try?
      Если мне не изменяет память (а она может, шалунья), в «Перле» нет «классических» блоков try-catch, и вместо них используется как раз «eval».
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • Ну, красоту этого подхода мне пока разглядеть трудно.
          Ответить
          • Красота в совместимости со старым кодом.

            Вот был у тебя код, который просто помирал при ошибках. А теперь ты можешь его завернуть в eval и обработать ошибку. Даже новый кейворд добавлять не пришлось в язык. И в старом коде не надо менять die на throw.
            Ответить
          • показать все, что скрытоvanished
            Ответить
            • В пхп ошибку тоже можно не ловить.
              Ответить
              • Именно поэтому я за пхп.
                Ответить
                • Написал член сообщества, где

                  -принято дрочить на фантазии о измены жены;
                  -дрочить на негров, которых вживую они скорее всего не видели;
                  -жаловаться на женщин, что они не приходят и не дают сами;
                  -наряжаться в женщин;
                  -коллективно дрочить на собачьи хуи и конские залупы;
                  -гнобить друг друга по кругу без какого-либо смысла.
                  Ответить
                  • не понял
                    Ответить
                    • -жаловаться на женщин, что они не приходят и не дают сами;

                      Все тут именно такие.

                      -наряжаться в женщин;

                      bormand

                      Про остальное не буду писать, чтобы не раскрывать местных энтузиастов.
                      Ответить
                      • >>-жаловаться на женщин, что они не приходят и не дают сами;
                        какие инцелы ))

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

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