Отправляет email-рассылки с помощью сервиса Sendsay

Linux Gazette на русском

  Все выпуски  

Linux Gazette на русском : Однострочник месяца на Perl: апрель -- жесточайший месяц


Информационный Канал Subscribe.Ru

[lg89]: Однострочник месяца на Perl: апрель -- жесточайший месяц

Linux Gazette на русском | Выпуск #179 | Тираж 10666 экз.


Здравствуйте! Хотя на улице кажется не апрель, но улыбнуться никогда не поздно. RLG продолжает публиковать переводы статей из серии "Однострочник месяца на Perl". На этот раз Вумерт использует Perl, чтобы немного подшутить на Фринком. К этому следует добавить, что при переводе ни один файл не пострадал. ;-)

Спасибо за перевод Павлу Соколову!

Александр Куприн


Однострочник месяца на Perl: апрель -- жесточайший месяц
Автор: Ben Okopnik
Перевод: Павел Соколов


-- Ты знаешь, Фринк, -- сказал Вумерт, развалившись на залитом солнцем шезлонге, -- апрель -- не самое плохое время в году. -- Он глотнул апельсинового сока, который был несколькими мгновениями до этого выжат из поздних "флоридских ананасовых" апельсинов, и удовлетворённо вздохнул. -- Некоторые люди жалуются на переменчивую погоду и необходимость заполнения налоговых деклараций, но...

-- Дело не в этом. -- проворчал Фринк. Определённо, он был на стороне тех, кто жалуется, несмотря на стоящую перед ним тарелку дымящихся великолепно выглядящих и пахнущих пирогов с луговым медом. Ему надо было подготовить домашнее задание к следующему дню и он чувствовал себя раздражённым. -- Это всё эти дурацкие шутки и розыгрыши. Я всё время чувствую себя как на иголках и мне приходится следить за всеми. Апрель, эх! Не могу дождаться, когда он кончится.

Вумерт приподнял брови, но ничего не ответил. Дотянувшись до стойки, он взял КПК и набрал несколько команд.

-- Я думал о новом JAPH [1] для себя, и только что родил вот это. Что ты думаешь?

Он направил iPAQ с запущенным Линукс на десктоп Фринка и активировал инфракрасный передатчик. Код появился на десктопе практически сразу.


{$/=q**}map{print+chr(y*(*(**$]*2+y*)*)*)}split/\./=><DATA> __END__ J -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- P u -*-*-*-*-*-*-*- (((((())))).(((( -*-*-*-*-*-*-*- e s -*-*-*-*-*-*-*- ((((((()).(((((( -*-*-*-*-*-*-*- r t -*-*-*-*-*-*-*- ((((()))).(((((( -*-*-*-*-*-*-*- l a -*-*-*-*-*-*-*- (((())))).(((((( -*-*-*-*-*-*-*- h n -*-*-*-*-*-*-*- (((()))))))).((( -*-*-*-*-*-*-*- a o -*-*-*-*-*-*-*- )).(((((((.((((( -*-*-*-*-*-*-*- c t -*-*-*-*-*-*-*- (((((().(((((((( -*-*-*-*-*-*-*- k h -*-*-*-*-*-*-*- ((().(((((((((() -*-*-*-*-*-*-*- e e -*-*-*-*-*-*-*- ))))))).((())).( -*-*-*-*-*-*-*- r r -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- ,
(Примечание автора: попробуйте запустить скрипт (его можно скачать в виде текстового файла), чтобы получить понятие о том, что происходит.)

-- Это... интересно, Вумерт, -- Фринк уставился в код, полностью потерявшись в первых нескольких символах. -- Извини, я не вижу смысла в этих вещах...в любом случае их сложно создать. Я пробовал много раз и

print "Just a Perl Hacker,"

кажется наиболее разумным вариантом.

В задумчивости он положил руки на клавиатуру. -- Чёрт, я никуда не попаду с этим заданием. Нас заставили выучить набор команд, необходимых для работы в сети. Я разобрался со всем, кроме последней задачи и чувствую, что больше не могу смотреть на них. Вумерт, что за "команда, которая выводит полное имя машины"? Я не могу придумать ни одной и, кстати, я думаю, что профессор здесь перегнул палку. Просто имя хоста -- это довольно просто: это моё приглашение в оболочке! Однако я не уверен, что может быть этим "полным именем"...

-- Довольно просто, -- Вумерт повернулся на другой бок, практически засыпая на тёплом весеннем солнышке. -- В Perl это может потребовать меньше нажатий на клавиши. Вот простой пример однострочника тебе на пробу:[2]


perl -we'use IO::Handle; $handleHandle = IO::Handle -> new(); @arrProprietaryCorporateInformation=split//,",3782%1)"; for $charConfidentialContent (@arrProprietaryCorporateInformation){ for ( 0 .. ord( $charConfidentialContent ) ){ $handleHandle->format_lines_per_page($_++); } push @arrIntermediateResults, chr $handleHandle->format_lines_per_page() + $=; } $strPreReleaseTemporaryBuffer = join "", @arrIntermediateResults; substr( $strPreReleaseTemporaryBuffer, 8 ) = "\040\055\055\146\161\144\156"; system "$strPreReleaseTemporaryBuffer";'

-- Или ты можешь упростить: [2]


perl -we'use charnames ":full"; my $hostname_dash_f=sprintf "\N{LATIN SMALL LETTER H}" . "\N{LATIN SMALL LETTER O}" . "\N{LATIN SMALL LETTER S}" . "\N{LATIN SMALL LETTER T}" . "\N{LATIN SMALL LETTER N}" . "\N{LATIN SMALL LETTER A}" . "\N{LATIN SMALL LETTER M}" . "\N{LATIN SMALL LETTER E}" . " -\N{LATIN SMALL LETTER F}"; $result_of_hostname_dash_f=`$hostname_dash_f`; printf "%-.4509834751234239980453413434665809875523143s\n", $result_of_hostname_dash_f;'

Фринк в испуге издал хныкающий звук, а затем неожиданно просветлел.

-- О! Возможно я смогу найти, если просто напечатаю "apropos hostname"!... ОК, вот она -- кажется, что команда называется "hostname". Ха. "man hostname" говорит, что ключи "-f" или "--fqdn" могут быть использованы, чтобы напечатать полное имя машины... Посмотрим:

frink@Aphrodite:~$ hostname -f
Aphrodite.Olympus

Он напечатал команду и сохранил результаты с очевидным удовлетворением.

-- Всё сделано! Это было просто. Вумерт, я удивлён, что ты не смог догадаться.

-- Да. Молодец, Фринк. Это было умно. Воспользовался стандартными командами Unix, кто бы мог подумать?... Теперь, когда ты закончил со своей домашней работой, переходи к занятиям Perl -- и не смотри так! Час хорошей работы и ты всё закончишь. Но до этого, передай, пожалуйста, ещё стаканчик этого апельсинового сока. Он довольно хорош, тебе стоит попробовать.

Как только Фринк пошёл на кухню, Вумерт выпрыгнул из кресла и отстучал очередь на клавиатуре:

x=`echo -e "\240"`;mkdir $x;echo "hostname -f">$x/perl;chmod +x $x/perl;export PATH=$x:$PATH;clear

Мгновение спустя он снова отдыхал на солнышке, само безделье, и, определённо, был слишком расслаблен, чтобы как-то двигаться в последний час. Фринк, вернувшись с соком, передал ему стакан.

-- Вообще-то, Вумерт, я ожидал, что ты из тех, кто любит разыгрывать других, особенно сегодня. Всё, что ты уже сделал, однако, довольно вяло. Должен сказать, что я несколько удивлён.

Вумерт с удовольствием потянулся, кивнул и встал. Подхватив лёгкую куртку он подошёл к двери и открыл её.

-- Что-то есть в том, что ты говоришь. Думаю, схожу к дому моего друга Нано Тек и посмотрю, в какую проблему мне удастся вляпаться. А, вот ещё что...

Фринк посмотрел на него из-за клавиатуры, где он только что собирался набрать первое задание по Perl.

-- Если ты не возражаешь, проверь кое-что для меня. Мне эта задача с "hostname" показалась интересной. Попробуй следующее:

perl -we'fqdn'

Фринк пожал плечами, определённо собираясь побыстрее начать свои занятия и добраться до их завершения.

-- Хорошо... А. Получилось. Почему ты не сказал мне этого раньше? Это встроенная функция Perl?... Однако она, кажется, зациклилась. Что бы я ни делал, она печатает одно и тоже. Что происходит, Вумерт?... Вумерт!

Звук захлопнувшейся входной двери стал единственным ответом.

Апрель был в самом разгаре.


[1] JAPH -- это ещё один способ баловаться с Perl, ставший известным благодаря Рандалу Шварцу (Randal Schwartz). Идея была написать какой-нибудь код на Perl (предпочтительно демонстрирующий какую-либо тонкость или механизм -- Рандал часто использовал JAPH, чтобы подчеркнуть то, что он объяснял в письме) и использовать его в качестве подписи для email. Когда она пишется в файл с помощью Perl shebang и выполняется (или запускается как скрипт из командной строки), код должен выводить строку "Just a Perl hacker,". Некоторые опускают последнюю запятую.

[2] Оба этих жутких монстра, конечно, представляют собой нормальный работающий код. :)

Бен -- сотрудничающий редактор Linux Gazette и член Банды ответчиков (в смысле, они отвечают на возникающие вопросы читателей. Прим. перев.)

Бен родился в Москве в 1962 г. В шесть лет заинтересовался электричеством -- продемонстрировав это, воткнув вилку в розетку и вызвав пожар. С тех пор неоднократно проваливался в технологические люки. Он начал работать с компьютерами ещё в старые, добрые времена, когда их приходилось собирать из деталей и припаивать на печатные платы, а программы должны были умещаться в 4k памяти. Он с радостью заплатил бы внушительную сумму любому психологу, способному излечить его от вызванных этим кошмаров.

Последующий опыт Бена включает создание программ практически на дюжине языков, поддержку сетей и баз данных во время приближающегося урагана, а также написание статей для публикаций в разных местах: от журналов по парусному спорту до техножурналов. Завершив недавно семилетний круиз по Атлантике/Карибскому морю под парусом, он на данный момент пришвартовался в Балтиморе, где работает техническим инструктором в Sun Microsystems.

Бен работает с Linux с 1997, и считает, что именно из-за него у Бена полностью пропал интерес к развязыванию атомной войны в разных частях северо-запада Тихого океана.


Copyright © 2003, Ben Okopnik. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 89 of Linux Gazette, April 2003


Команда переводчиков:
Александр Куприн, Александр Михайлов, Александр Саввин, Андрей Киселев, Андрей Романчев, Владимир Меренков, Владимир Средних, Иван Песин, Игорь Яровинский, Павел Соколов, Роман Шумихин, Сергей Скороходов, Юрий Прушинский, Юрий Султанов

Со всеми предложениями, идеями и комментариями обращайтесь к Александру Куприну (ru_classic at mail.ru). Убедительная просьба: указывайте сразу, не возражаете ли Вы против публикации Ваших отзывов в рассылке.

Сайт рассылки: http://gazette.linux.ru.net
Перевод можно найти по адресу: http://gazette.linux.ru.net/lg89/okopnik.html



http://subscribe.ru/
http://subscribe.ru/feedback/
Адрес подписки
Отписаться

В избранное