На этой неделе обновил документацю по Mojolicious на русском языке.
Читаем, редактируем, присылаем патчи http://github.com/xoma/Russian-translate-of-Mojolicious-guides.
Спасибо всем, кто участвовал в переводе! Подробный перечень здесь!
коплю тут всякий хлам, который не влезает в твиттер =) а тумблур мне не понравился =)
Показаны сообщения с ярлыком Perl. Показать все сообщения
Показаны сообщения с ярлыком Perl. Показать все сообщения
суббота, 9 октября 2010 г.
пятница, 8 октября 2010 г.
Как обновить все Perl-модули за один раз ?
Вы следите за обновлением CPAN модулей, которые используются в ваших приложениях ? Нет!?!?
Думаю, не стоит объяснять для чего нужно их обновлять! Вы ведь обновляете свою операционную систему?! Ну да ладно! Речь не о том!
Для того чтобы узнать список Perl-модулей для которых доступны свежие версии - воспользуемся утилитой cpan, а чем же еще! В консоли вводим: cpan. Откроется cpan shell, в который вводим команду 'r', в результате получим список модулей для которых имеются обновления.
Для обновления - просто вводим команду 'upgrade' и идем пить чай, переодически поглядывая на консоль, так как процесс обновления может потребовать вашего участия.
Для обновления конкретного модуля в cpan shell вводим команду:
Не хотите запускать cpan shell...нет проблем - обновляемся из командной строки linux.
Вводим команду:
В результате этого все модули будут обновлены (у меня заняло около 30-45 минут).
p.s. ВНИМАНИЕ! ГЛОБАЛЬНОЕ ОБНОВЛЕНИЕ МОЖЕТ СЛОМАТЬ ВАШЕ ПРИЛОЖЕНИЕ, ЕСЛИ ВЕРСИИ МОДУЛЕЙ НЕСОВМЕСТИМЫ!!!
Думаю, не стоит объяснять для чего нужно их обновлять! Вы ведь обновляете свою операционную систему?! Ну да ладно! Речь не о том!
Для того чтобы узнать список Perl-модулей для которых доступны свежие версии - воспользуемся утилитой cpan, а чем же еще! В консоли вводим: cpan. Откроется cpan shell, в который вводим команду 'r', в результате получим список модулей для которых имеются обновления.
Для обновления - просто вводим команду 'upgrade' и идем пить чай, переодически поглядывая на консоль, так как процесс обновления может потребовать вашего участия.
Для обновления конкретного модуля в cpan shell вводим команду:
upgrade -ИМЯ_МОДУЛЯ-
Не хотите запускать cpan shell...нет проблем - обновляемся из командной строки linux.
Вводим команду:
perl -MCPAN -e 'CPAN::Shell->install(CPAN::Shell->r)'
В результате этого все модули будут обновлены (у меня заняло около 30-45 минут).
p.s. ВНИМАНИЕ! ГЛОБАЛЬНОЕ ОБНОВЛЕНИЕ МОЖЕТ СЛОМАТЬ ВАШЕ ПРИЛОЖЕНИЕ, ЕСЛИ ВЕРСИИ МОДУЛЕЙ НЕСОВМЕСТИМЫ!!!
use Perl or die;
пятница, 10 сентября 2010 г.
Catalyst и перегенарция моделей DBIx::CLASS
Как бы не ругали Catalyst, а тем более Perl - все же это очень удобные инструменты!
Взять только одну перегененрацию моделей!
Подробнее тут
Взять только одну перегененрацию моделей!
Подробнее тут
четверг, 9 сентября 2010 г.
Perl. Как узнать версию модуля ?
Вот один из вариантов:
perl -MMojo -e 'print Mojo->VERSION'
Здесь Mojo - название модуля, версию, которого мы хотим узнать, его с успехом можно заменить на CGI или что-то еще.
perl -MMojo -e 'print Mojo->VERSION'
Здесь Mojo - название модуля, версию, которого мы хотим узнать, его с успехом можно заменить на CGI или что-то еще.
Как запустить Catalyst приложение в отладочном режиме и не перезапускать при изменении файлов
./script/myapp_server.pl -r -d
./script/myapp_server.pl --help - покажет много других полезных опций
В данном примере приложение называется MyApp.
./script/myapp_server.pl --help - покажет много других полезных опций
В данном примере приложение называется MyApp.
среда, 8 сентября 2010 г.
Изучаем Perl. Упражнения к главе 3.
Перечитывая в 3-ий раз "Изучаем Perl" решил пройтись по всем упражнениям, которые там приводятся. Бубликую здесь свои варианты решения.
п.с. Парсер блогера вырезает строку STDIN, заключенную в знаки <> =(
1.
п.с. Парсер блогера вырезает строку STDIN, заключенную в знаки <> =(
1.
use strict; use warnings; use 5.010; say 'Enter some lines!'; my @lines = 'STDIN'; # STDIN в >< @lines = reverse @lines; say "Reversed lines is @lines";2.
use strict;
use warnings;
use 5.010;
my @names = qw/Perl Php Python Ruby C++ C Shell/;
say 'Enter some numbers:';
chomp(my @numbers = 'STDIN'); # STDIN в ><
say 'You favorite languages is:';
foreach(@numbers){
say $names[$_] if $names[$_];
}
3.
use strict; use warnings; use 5.010; say 'Input some strings!'; chomp(my @strings = 'STDIN'); @strings = sort @strings; say "Sorted strings is: @strings";
четверг, 2 сентября 2010 г.
Perl. Восстановление переменной в цикле
use strict;
use warnings;
use 5.010;
my @languages = qw/Perl PHP Ruby/;
my $lang = 'Python';
foreach $lang (@languages){
say $lang;
}
say '===========Loop is end!==========';
say $lang;
В результате получим:
Perl
PHP
Ruby
===========Loop is end!==========
Python
Таким образом Perl, при входе в цикл foreach сохраняет значение управляющей переменной, а после выхода из цикла восстанавливает ее.
Кроме того при модификации управляющей переменной - меняется и элемент массива:
use strict;
use warnings;
use Data::Dumper;
use 5.010;
my @languages = qw/Perl PHP Ruby/;
my $lang = 'Python';
foreach $lang (@languages){
$lang = "$lang is cool!" if $lang eq 'Perl';
say $lang;
}
say Dumper(\@languages);
Получим:
Perl is cool!
PHP
Ruby
$VAR1 = [
'Perl is cool!',
'PHP',
'Ruby'
];
среда, 1 сентября 2010 г.
Perl VS PHP холиварим
Коллега сегодня изрек. Расшифровка "ПХП":
p.s. языки можно поменять местами, кому как больше нравится =)
p.p.s Можно и Питон сюда вкорячить.
'Пхп - Хуевый Перл'
p.s. языки можно поменять местами, кому как больше нравится =)
p.p.s Можно и Питон сюда вкорячить.
пятница, 27 августа 2010 г.
qw - 'Quoted Words' или 'Quoted by Whitespace'
my @data = qw /Mojolicious Catalyst Dancer/;
Perl интерпретирует данные в выражении qw как строки в апострофах, т.е. там нельзя использовать интерполяцию переменных и символы типа '\n'
qw удалет пропуски (пробелы, табуляции, символы новой строки), а все остальное преобразует в список.
Для включения в список символа ограничителя - необходимо экранировать его с помощью '\'
my @data = qw !Google Yahoo \! Rambler!;
Отрицательные индексы в массивах Perl
В Perl есть прекрасная возможность отсчитывать индексы не с начала массива, а с конца.
Пример:
Для обращения к последнему элементу массива вместо конструкции:
Можно использовать вот такую:
Пример:
my @languages = ('Perl','Python','Php');
say $languages[-3];
#тоже самое что и $languages[0] - выведет "Perl"
Для обращения к последнему элементу массива вместо конструкции:
$#languages; #конструкция $#имя_массива - вернет последний индекс массива
Можно использовать вот такую:
$languages[-1];
среда, 25 августа 2010 г.
Flash-сообщения
Прикрутил к нашему самописному Perl-овому движку возможность использовать flash-сообщения.
Алгоритм прост:
1. Записать сообщение в сессию.
2. При следующем чтении этого сообщения - удалить его из сессии.
Вот и все! Жизнь стала проще и веселее =)!
Алгоритм прост:
1. Записать сообщение в сессию.
2. При следующем чтении этого сообщения - удалить его из сессии.
Вот и все! Жизнь стала проще и веселее =)!
MojoX::Validator первое знакомство
На CPAN есть вот такой замечательный модуль для валидации данных (!) MojoX::Validate . Как видно из названия модуль предназначен для использования в фреймворке Mojolicious. Однако и отдельно от него он прекрасно работает, хотя и тащит за собой Mojo =(.
Пример использования:
Маленькая особенность.
Если в конструкции:
Для одного поля используйте запись вида:
Пример использования:
use MojoX::Validator;
#создаем новый объект
my $validator = MojoX::Validator->new;
#массовое добавдение полей для проверки
$validator->field([qw/ID USER_ID/])->each(sub{
shift->required(1)->regexp(qr/^\d+$/)
});
#правило для одного поля
$validator->field('NAME')->length(1,20);
#валидируем
$validator->validate({NAME => $name});
#получаем ошибки
$validator->errors;
Маленькая особенность.
Если в конструкции:
$validator->field([qw/ID USER_ID/])->each(sub{
shift->required(1)->regexp(qr/^\d+$/)
});
указать только одно поле (в списке полей) - работать не будет! Для одного поля используйте запись вида:
$validator->field('NAME')->length(1,20);
вторник, 24 августа 2010 г.
Оператор повторения строк в Perl
Оператор повторения строк в Perl - x.
Пример:
$str = 'xoma';
say $str x 3; #xomaxomaxoma
Пробел между переменной-строкой и знаком "x" обязателен.
Иначе возникнет неоднозначность и программа работать не будет.
Пример:
$str = 'xoma';
say $str x 3; #xomaxomaxoma
Пробел между переменной-строкой и знаком "x" обязателен.
Иначе возникнет неоднозначность и программа работать не будет.
Изучаем Perl. Упражнения к главе 2.
Ответы на упражнения к главе 2.
1
4
Особо запомнилась конструкция вида:
1
#!/usr/bin/env perl2
use strict;
use warnings;
use 5.010;
use constant PI => 3.141592654;
my $radius = 12.5;
say 2 * PI * $radius;
#!/usr/bin/env perl3
use strict;
use warnings;
use 5.010;
use constant PI => 3.141592654;
say 'Input radius:';
chomp(my $radius = <STDIN>);
say 2 * PI * $radius;
#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;
use constant PI => 3.141592654;
say 'Input radius:';
chomp(my $radius = <STDIN>);
my $circ = 2 * PI * $radius;
if($radius < 0){
$circ = 0;
}
say $circ;
4
#!/usr/bin/env perl5
use strict;
use warnings;
use 5.010;
say 'input one number:';
chomp(my $one = <STDIN>);
say 'input second number:';
chomp(my $second = <STDIN>);
my $result = $one * $second;
say "$one * $second = $result";
#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;
say 'input one string:';
chomp(my $string = <STDIN>);
say 'input repeat number:';
chomp(my $number = <STDIN>);
my $result = $string x $number;
say "result is $result";
Особо запомнилась конструкция вида:
chomp(my $radius = <STDIN>);
понедельник, 23 августа 2010 г.
Списки и массивы в Perl
Я все время путался в терминах, что такое список и что такое массив в Perl.
Перечитывая "Изучаем Perl" обнаружил, что там дается простое и понятное определение.
Перечитывая "Изучаем Perl" обнаружил, что там дается простое и понятное определение.
Список содержит упорядоченную коллекцию скалярных значений.
Массив представляет собой переменную для хранения списка.
Список - это данные, а массив - переменная.
В программе можно создать списочное значение, которое не хранится в массиве, но любая переменная массива содержит список.
суббота, 21 августа 2010 г.
Mojo 0.999929
Поставил Mojo 0.999929.
Все хочу подробнее "поковырять" Mojo и Mojolicious - да вот все времени не хватает =(.
Для тех кто не знал/забыл - для установки/обновления этого замечательного Perl-фреймворка введите (ubuntu):
Все хочу подробнее "поковырять" Mojo и Mojolicious - да вот все времени не хватает =(.
Для тех кто не знал/забыл - для установки/обновления этого замечательного Perl-фреймворка введите (ubuntu):
sudo cpanp install Mojo
пятница, 20 августа 2010 г.
Ассоциативность операторов в Perl
Я уже и забыл, что есть такая штука как "ассоциативность" операторов и что она бывает правая и левая. Ассоциативность определяет в какой последовательности выполняются операторы с одинаковым приоритетом.
Пример:
Если возникает неоднозначность - просто используйте скобки!
Тем самым вы облегчите жизнь тому, кто будет поддерживать ваш код!
Пример:
5**6**8 # в какой последовательности будет выполнено возведение в степень ?Правильный ответ:
5**(6**8) # так как опертатор ** имеет правую ассоциативностьВ "книге с ламой" очень правильно написано:
Нужно ли заучивать таблицу приоритетов и ассоциативности ?
НЕТ!
Никто этого не делает!
Если возникает неоднозначность - просто используйте скобки!
Тем самым вы облегчите жизнь тому, кто будет поддерживать ваш код!
Подписаться на:
Сообщения (Atom)
