Perl такой Perl

Mar 04, 2010 10:26

Последнее время этот язык меня сильно удивляет. О, сколько нам открытий чудных...
Операторы last и next не так просты как кажется )
Недавно для себя я открыл возможность использовать их не только в циклах %)
Как говорится в документации, оператор last помимо своего прямого назначения (прерывания цикла), также может быть использован для раннего выхода из блока кода, т.к. блок семантически схож с циклом. Например perl -e '{print 1; last if (1); print 2}'; perl -e '{print 1; last if (0); print 2}'

Но у такого использования оператора last есть исключения, также прописанные в документации. Например, нельзя выйти из блока if и из блоков, возвращающих значение eval {}, sub {} или do {}, но и это не такая уж проблема ;) Также нельзя выйти из map и grep, но это уже странные желания :)
Добавлением пары фигурных скобок наши брюки превращаются... превращаются...
perl -e 'if (1) {{print 1; last if (1); print 2}}'

Кому как, а мне такой финт ушами очень нравится :)

PS: В данном контексте оператор next ведет себя точно так же ;)
PPS: Оператор redo в таком контексте используйте на свой страх и риск ;)

программистское, 2010, perl

Previous post Next post
Up