Освоим perl 6 к 2015 году!: nota XLVIII. >>
Создадим небольшую
Создадим небольшую
Интересно удостовериться как обрабатываются несколько минусов-плюсов
По аналогии с keys существует value - выводит список значений
Интересный новый оператор, max. Возвращает максимальное число из
Восклицательный знак служит для отрицания
keys возвращает массив ключей хэша, sicut
Вот, допустим, у нас есть переменная $abc. Её можно интерполировать в строку как
В названиях переменных может быть цифра, буква, подчеркивание, дефис и апостроф. Так написано в "Using perl 6".
Теперь для перебора элементов массива с присвоением значения какой-то переменной служит конструкция со стрелочкой
В "Using perl 6" говорится, что хорошо бы начинать все программын на perl 6 со строки "use
Как мы уже не раз пробовали, теперь в perl можно использовать цепочки действий (методов). Вместо громоздких конструкций со скобками вроде такого: действие1(действие2(действие3(действие4(1000)))) можно делать так
Теперь в регулярных выражениях можно самому задавать названия для сохраняющих скобок. Раньше, если в регулярном выражении, встречалось что-то вроде (\d+), то содержимое записывалось в переменную $1 (или $2, $3...) Сейчас можно проще.
Мы уже пробовали грамматики. Оказывается, есть их более простое подобие - именованные регулярные выражения. В "Using perl 6" дается такой пример регекса
Сразу после установки Rakudo Star 2010.08 хочется проверить производительность и - особо - утечку
26 августа произошел второй по счету релиз звездного ракудо,
Вот оно что! Оказывается, что << означает левую границу слова. А >> соответственно правую! Первый, кстати, можно заменить одним символом «. Второй - символом
+, * и ? имеют по-прежнему место
Тригонометрические функции бывают двух видов.
Для получения целого числа из нецелового существует ещё truncate, как
abs - возвращает абсолютное значение числа, то есть отбрасывает минус, если
До прихода в Perl оператора state, который позволяет создавать «статические» переменные прямо внутри подпрограмм, люди пользовались вот таким приемом:
{
my $count = 0;sub next_value {
return ++$count;
}}
print next_value, "\n";
print next_value, "\n";
Теперь все ребята пишут так:
use v5.10;
sub next_value {
state $count = 0;return ++$count;
}say next_value;
say next_value;
#!/usr/bin/env perl
use common::sense; use ojo;die "Usage: $0 <podcast url>" unless @ARGV;
b(g( shift )->dom->find("enclosure[url]")->each(sub {
local $_ = shift->attrs->{url}; say if /\.mp3$/;
}));
Сегодня на «Веб-планете» появилась статья ни о чем под таким же названием: «РИТ 2010: мушкетёры 0010 лет спустя».
Читать ее всю нет нужды (да и абзацы там не связаны один с другим). Процитирую лишь пару мест.
Возможно, было бы верно и правильно рассказать про DevConf, где был сделан акцент на языках веб-программирования (PHP, Perl, Python, Ruby и, отчего-то, .NET) - с элементом соревновательности между ними. Но, право слово, для привлечения неофитов и превращения их в адептов этих ЯП, цену на вход надо снижать всё же до приемлемого для студентов уровня. В этом смысле пример продавшегося-слившегося YAPC::Russia, он же MayPerl, особенно печален. Хотя, возможно, подобное бессеребреничество сейчас могут позволить себе лишь монстры типа Google и Microsoft, для которых задача подсадить на свои технологии с уже молодости особенно важна и актуальна. Так что не будем о грустном.
Оставив за бортом стилистическую убогость этого фрагмента (и всего текста), официально могу сказать, что автор (по-ссыкловски подписавшийся Фуэнте Овехуной) не прав и не разбирается в теме.
Конференция YAPC::Russia «May Perl» выросла из первого российского Perl-воркшопа, прошедшего в Москве в 2007 году. В следующие два года под этим названием она проходила только в Москве, параллельно с другими мероприятиями в семи странах (в семи, блядь, странах!). В 2010 она не продалась-слилась, а наоборот, расширилась, и породила аж три мероприятия: совместную конференцию в Киеве и два потока на других IT-конференциях в Москве.
Название «May Perl» (оно, к вопросу о грамотности, пишется с пробелом) в 2010-м году было использовано только один раз, и не на DevConf в мае, а на РИТ++ в апреле.
YAPC::Russia / MayPerl
Конференция РИТ – это как матрёшка, содержащая внутри другие конференции – ClientSide, RootConf, MayPerl. Последняя из названных, как понятно, вся «чисто про Perl».
Автор заблуждается — конференция не только про язык программирования. Она еще про сообщество, которое у перла такое, что «Веб-планете» и не снилось.
В следующем году четвертая конференция YAPC::Russia «May Perl» — 2011 пройдет в Москве 14 и 15 мая. За день до этого запланирован хакмит про Perl 6 с участием мировых звезд.
А в августе 2011-го тот же коллектив организаторов проводит европейскую конференцию YAPC::Europe 2011 в Риге. Сосите, дрочеры, вместо того, чтобы писать бессмыслицу и катить на моих коллег и мои проекты.
P. S. Несколько дней назад появился запоздалый отчет о конференции РИТ++ за авторством Виталия Филиппова. Очень интересно сравнивать фрагменты веб-планетной статьи с этим текстом.
На сайте Perl5doc.ru в разделе CPAN появился документ Mojolicious::Guides::Rendering, описывающий механизм рендеринга Mojolicious.
Subj. Не пойму в чем может быть дело, при запуске с параметром daemon_prefork вижу, что сервер начал жутко тормозить, приложение стало нагружать процессор. Начал выяснять strace-ом причину:
...
flock(6, LOCK_EX|LOCK_NB) = -1 EAGAIN (Resource temporarily unavailable)
flock(6, LOCK_EX|LOCK_NB) = -1 EAGAIN (Resource temporarily unavailable)
flock(6, LOCK_EX|LOCK_NB) = -1 EAGAIN (Resource temporarily unavailable)
flock(6, LOCK_EX|LOCK_NB) = -1 EAGAIN (Resource temporarily unavailable)
Сделал: lsof -d 6 -p 12980, вывод:
perl 12980 root 6w REG 253,0 0 32505878 /tmp/mojolicious_lite.lock
perl 12981 root 6w REG 253,0 0 32505878 /tmp/mojolicious_lite.lock
perl 12982 root 6w REG 253,0 0 32505878 /tmp/mojolicious_lite.lock
Подробности: http://gist.github.com/558876
# ls -l /tmp/mojolicious_lite.lock
-rw-r--r-- 1 root root 0 Aug 31 15:26 /tmp/mojolicious_lite.lock
Ведающие люди, подскажите что делать? Из-за чего может быть проблема?
ОС: CentOS 5.5.
UPDATE: Проверял на последней версии 0.999930 — проблема решена. У кого 0.999926, обновляйтесь.
Может это так и надо делать? if($ENV{'mode'} eq "dialup"){ if($ENV{'login'}=~/^P/){ if($ENV{'bill'}){ if($ENV{'passwd1'}){ if($ENV{'passwd1'} eq $ENV{'passwd2'}){ if($ENV{'email'}){ my($rUser)=check_radius_user_new($ENV{'login'}); my($sUser)=check_http_user_new($ENV{'login'}); #my($Email)=Check_MailBox($ENV{'login'},$ENV{'email'}); if(($rUser==0)and($sUser==0)and($Email==0)){ my($bUser)=check_billing_user($ENV{'bill'}); if($bUser==0){ add_radius_user($ENV{'login'},$ENV{'passwd1'}); add_http_user($ENV{'login'},$ENV{'passwd1'}); add_billing($ENV{'login'},$ENV{'bill'}); Add_MailBox($ENV{'login'},$ENV{'email'},$ENV{'passwd1'}); $ENV{'message'}="User created"; }else{$ENV{'message'}="Error: Billing name is already exist";} if($Email!=0){$ENV{'message'}="Error: Email name or alias is already exist";} }else{$ENV{'message'}="Error: Sorry such login is already exist";} }else{$ENV{'message'}="Error: Enter e-mail";} }else{$ENV{'message'}="Error: Password mistake";} }else{$ENV{'message'}="Error: Enter password";} }else{$ENV{'message'}="Error: Enter billing name";} }else{$ENV{'message'}="Error: Enter login";} }else{$ENV{'message'}="Error: ";} $ENV{'message'}=~s/ /\%20/g;
Отправить письмо в Mojolicious -- легко, используя Mojolicious::Plugin::Mail.
А кто пизжи может отправить письмо из веб-приложения?
Требования: письмо с дизайном в шаблоне, тема письма там же, в коде только кому и отправка.
$self->plugin(mail => { from => 'sharifulin@gmail.com', encoding => 'base64', type => 'text/html', how => 'sendmail', howargs => [ '/usr/sbin/sendmail -t' ], });
my $data = $self->helper('render_mail', 'user/signup'); $self->helper('mail', mail => { To => 'sharifulin@gmail.com', Subject => $self->stash('subject'), Data => $data, });
% layout 'default', subject => 'Тема письма', title => 'Спасибо!'; <p>Здесь HTML</p>
<h2><%= $title %></h2> %== content
<p>Футер</p>
А вот Карл пошагово рассказывает, как от классической реализации треугольника паскаля можно докатится до
my @pascal := do [1], ->@p { [0, @p Z+ @p, 0] } ... *
#curl -L http://cpanmin.us | perl - --self-upgrade
#cpanm Task::Dancer
#cpanm Starman
#dancer -a NewProject
Хочется поднять на своем серваке wiki куда я и мои родственники будем складывать разную информацию (в основном будем ее использовать как иерархическое хранилище ссылок с короткими каментами, основную часть изменений буду делать все-таки я).
Нужно чтобы wiki была более-менее руссифицирована. Дизайнов красивых не требуется.
Посоветуйте wiki которое
* не требует пол-CPAN'а (в частности, Catalyst :-) и чтобы была по-легче в плане потребления RAM
* работает под мод-перлом
* использует либо filesystem (либо sqlite) либо mysql для данных
Наковнокодил скрипт для переименования
файлов сериала «Стар Трек»,
на основе данных Википедии.
«Стар Трек» скачан известно откуда.
#!/usr/bin/env perl
use strict;
use warnings;
use integer;
use utf8;
use open qw( :utf8 :std );
use File::Find ();
use File::Basename;
use vars qw/*name *dir *prune/;
*name = *File::Find::name;
*dir = *File::Find::dir;
*prune = *File::Find::prune;
my $REGEX = q^<td align="center">(\d+)\.(\d+)</td><td>«<b>(.+?)</b>»<br>.*?lang="en">(.+?)</span>^;
$REGEX =~ s#\s+# #g;
$REGEX =~ s#> ?<#> ?<#g;
my $CNT = '';
while (<STDIN>)
{
s/(\n|\t\r)+/ /;
s/\s\s+/ /;
$CNT .= $_;
}
print '#!/bin/bash
set -e
set -u
';
my %SER = ();
while ($CNT =~ s/$REGEX//i)
{
#print qq#"$1x$2 — $3 ($4).avi"\n#;
$SER{"$1x$2"} = "$1x$2 — $3 ($4).avi";
}
sub wanted
{
my ($dev,$ino,$mode,$nlink,$uid,$gid);
(($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
-f _ &&
/^.*\.avi\z/s
&& do
{
utf8::decode($name);
my $dir = dirname($name);
my $f = basename($name);
if ($f =~ m/(\d+).(\d+)/)
{
if (exists $SER{"$1x$2"})
{
my $newname = $SER{"$1x$2"};
if ($newname ne $f)
{
print(qq(mv "$name" "$dir/$newname"\n));
}
}
}
}
}
File::Find::find({wanted => \&wanted}, '.');
print '
exit 0
';
exit 0
Использовать так:
./st-tng < 1.html > st-tng.sh
По мотивам Пишем свой плагин для Nagios Собственно, пых-пых это хорошо. Однако в данной статье хочу обратить внимание на CPAN-модуль Nagios::Plugin, который значительно облегчает как написание Nagios плагина на Perl, так и читабельность исходника. Пример — плагин для проверки работоспособности логина на удаленный FTP. В составе стандартных плагинов я такой функциональности не нашел, по этому быстренько и аккуратно написал вот что. check_ftp_login
Мориц Ленц сообщает о том, что на своих экспериментах по расчету физических явлений он заметил существенное снижение объема памяти, потребляемого Rakudo. Правки, устраняющие утечку памяти, — всего несколько строк, но зато теперь можно построить гигантскую картинку с изображением множества Мандельброта. Мориц показывает пример 1001 1001. Еще в мае более или менее быстро — и, что важнее, без падений — можно было построить картинку в 25 раз меньшую по площади.
Нашел тут в одном проекте. Теперь хочу поделиться с вами великолепным способом получения числа уникальных значений из таблицы. В этот способ научит вас использовать всю мощь перла. my $arr=[]; my $res=$dbr->selectrow_arrayref("SELECT DISTINCT obj.value FROM obj INNER JOIN ... INNER JOIN ... INNER JOIN ... INNER JOIN ... INNER JOIN ... WHERE ..... сложный, но не интересный SQL-запрос к наскольким таблицам под лям записей в каждом ..."); arm_ls.lsid IN ($ls_str) foreach $row (@$res) { push(@$arr,$row->[0]) if (!grep(/^$row->[0]$/,@$arr)); } my $sum=@$arr; return $sum;
head_of_babulka
обратил внимание на онлайн-голосовалку по теме ближайших президентских выборов в РБ.
Ну, просто так голосовать не интересно. Нужно подойти к делу творчески и сделать робота, который может зарабатывать проценты для любимого кандидата без отдыха круглые сутки.
Скрипт написан в качестве развлечения и содержит несколько изюминок. Чтоб его не забанили, он пытается прикинуться разными людьми, чистит куки, использует разные строки юзерагентов, разные прокси сервера, разбирает динамически генерирующиеся значения формы и даже скачивает картинку, которая, возможно, используется сервером для опознания тупых роботов.
#!/usr/bin/perl -l # lu.pl -- votes for Belarus! use strict; use warnings; use WWW::Mechanize;my $m = WWW::Mechanize->new();
# IE useragent strings my @ua = map m{(Mozilla/[^<]+)}g, $m->get('http://www.useragentstring.com/pages/Internet%20Explorer/')->content;
# proxies list my @pr = map /(\d+(?:\.\d+){3}:\d+)/g, map { m[^([^<]+);</script></head>$]m; my %h = split '=|;', $1; s/":"/:/g; s/\+(.)/$h{$1}/g; s/(\d+(?:\.\d+){3})[^:]+/$1/g; $_; } map { $m->get( sprintf 'http://www.samair.ru/proxy/time-%02d.htm', $_ )->content } 1 .. 10;
for my $i (0 .. @pr) { eval { # catch timeouts and inner deaths $m->cookie_jar({}); # clear cookies $m->agent( $ua[rand @ua] ); # random useragent string $m->proxy('http', "http://$pr[$i]/"); $m->get('http://election.in-by.net');
$m->content =~ m{http://[^/]+/form\.php\?opt=[^"]+} # iframe src or die; $m->get($&);
$m->content =~ m{http://[^/]+/image\.php\?opt=[^']+} # tripwire? or die; $m->get($&);
$m->back(); $m->content =~ m{selectElement\(this, (\d+)\);"></div></td>[^>]+>\S{9}\s\S{9}<} # Александр Лукашенко or die; $m->field('act', $1); $m->click;
$m->content =~ m{>\S{9} \S{9}</td>\s+<td class="r">([^%]+)%} or die; print "$i - $1 ($pr[$i])"; } };
Доброго дня,
что можно прописать HTML::TreeBuilder'у, что бы он перестал кодировать русские буквы в HTML спецсимволы?
Что бы на выходе такого скрипта был "Тест", а не "Òåñò"
my $tree = HTML::TreeBuilder->new; my $content = "Тест"; $tree->parse_content($content); print $tree->as_HTML;
уже которую неделю бьюсь над этим кодом.. никак не могу сделать так, чтобы он правильно работал.. требуется всего лишь брать случайную строку из файла, но перед этим возвращать указатель в начало файла, так как перед этим он может быть сдвинут функцией записи, но даже если использовать только этот код, он работает некорректно. что здесь не так? где ошибка? #!/usr/bin/perl -w our $pfraz; open $pfraz, "+< ./pfraz"; sub db_read_random_line { my $fh = $_[0]; my $line; seek $fh, 0, 0; rand($.) < 1 && ($line = $_) while <$fh>; return $line; } while(1){ sleep 1; print &db_read_random_line($pfraz); } файл pfraz должен содержать несколько строк текста
Обновил Mojolicious::Plugin::Dbi так как он оказался кому-то кроме меня нужен :)
Что добавлено:
- параметр 'on_connect_do' , например 'on_connect_do' =>[ 'SET NAMES UTF8'], т.е. команды которые надо выполнить сразу после коннекта
- поддержку постоянных соединений, теперь при включении 'no_disconnect' => 1 соединение кэшируется и используется при следующих запросах
- параметр 'requests_per_connection' - сколько реквестов обработает закешированное соединение перед тем как произойдет реконнект.
ИМХО хорошая альтернатива: Mojolicious::Plugin::DbixConnector
весьма все лаконично, что радует.
А вообще, я думаю, что все-таки разработчик Mojo добавит трУЪ плагин для работы с БД, потому как каждый для этих целей под Mojo пока стругает своего кривого буратинку и катает на велосипедике, подождем что будет.
P.S. Попутно обновил на CPAN свои плагины для Bootylicious
Получился вот такой модуль для отправки почты в Mojolicious – Mojolicious::Plugin::Mail github.com Предыдущие renderer-ы удалил, т.к. глючали и были без тестов. Можете тестировать :)
Вот коллега притащил такой раритет 1999 года =). Рядом последнее 5-ое издание 2009 года. Вот счетовод то =))) 10 конечно!
Несколько запоздалый, однако отчёт, о конференции "Российские интернет-технологии 2010", проходившей 12-14 апреля 2010 года. В не очень формальном стиле :) Главные темы "номера" — Perl 5 и 6 (хоть и без Вортингтона, "который очень любит beer/vodka и так далее"), UNIX, виртуализация, дата-центры и хостинги. А также Agile от Моего Круга и Afisha.ru, блиц-доклады, и бонус, врученный одному товарищу за скорость заказа билетов — живой карликовый кролик.
Эта заметка рассчитана на молодых программистов, которые уже какое-то время используют или только начинают использовать в работе интерпретируемые языки программирования, но пока еще не изучали принцип работы самого языка.
В наше время, в связи с потенциально не плохими зарплатами и офисного типа работой, программирование стало достаточно популярным среди молодежи. К тому же спросом пользуются достаточно не сложные для первоначального освоения языки программирования: Javascript, PHP, Perl, Python, Java, C#, Basic,… (как видно все они одного семейства — интерпретаторы). В результате появилось достаточно большое количество работников этой отрасли, которые специально программированию нигде не обучались. Требовался программист на язык “X”, купили книгу “X за 2 недели” и через 3 недели – мы уже пишем какой-то проект на “X”. А спустя несколько тысяч строк кода или после того, как база данных обросла реальными данными, проект начинает нещадно тормозить. Можно, конечно, ”пойти поиграть на барабанах”, пока железо дорастет до вашего проекта, но не всегда и не всех этот вариант устраивает.
В интернете, за авторством Алексея Карманова, появился сайт perl6.su. Важно не пропустить страницу Charte situs со ссылками на заметки по отдельным моментам синтаксиса Perl 6.
/^([a-zA-Z0-9]+)([-_.]?[a-zA-Z0-9]+)*@([a-zA-Z0-9]+[-_.]?)*[a-zA-Z0-9]+(?:\.[a-zA-Z]{2,6})$/