Показаны сообщения с ярлыком Perl. Показать все сообщения
Показаны сообщения с ярлыком Perl. Показать все сообщения

пятница, 8 октября 2010 г.

Dancer Perl фреймворк. Презентация.

Dancer Perl фреймворк. Презентация.

Как обновить все Perl-модули за один раз ?

Вы следите за обновлением CPAN модулей, которые используются в ваших приложениях ? Нет!?!?
Думаю, не стоит объяснять для чего нужно их обновлять! Вы ведь обновляете свою операционную систему?! Ну да ладно! Речь не о том!

Для того чтобы узнать список 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 или что-то еще.

Как запустить Catalyst приложение в отладочном режиме и не перезапускать при изменении файлов

./script/myapp_server.pl -r -d

./script/myapp_server.pl --help - покажет много других полезных опций

В данном примере приложение называется MyApp.

среда, 8 сентября 2010 г.

Изучаем Perl. Упражнения к главе 3.

Перечитывая в 3-ий раз "Изучаем Perl" решил пройтись по всем упражнениям, которые там приводятся. Бубликую здесь свои варианты решения.

п.с. Парсер блогера вырезает строку 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 Можно и Питон сюда вкорячить.

пятница, 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. При следующем чтении этого сообщения - удалить его из сессии.

Вот и все! Жизнь стала проще и веселее =)!

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" обязателен.
Иначе возникнет неоднозначность и программа работать не будет.

Изучаем Perl. Упражнения к главе 2.

Ответы на упражнения к главе 2.


1
#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;

use constant PI => 3.141592654;

my $radius = 12.5;
say 2 * PI * $radius;
2
#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;

use constant PI => 3.141592654;

say 'Input radius:';

chomp(my $radius = <STDIN>);

say 2 * PI * $radius;
3
#!/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 perl
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";
5
#!/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>);

10 лет прошло

понедельник, 23 августа 2010 г.

Списки и массивы в Perl

Я все время путался в терминах, что такое список и что такое массив в Perl.  
Перечитывая "Изучаем Perl" обнаружил, что там дается простое и понятное определение.
Список содержит упорядоченную коллекцию скалярных значений. 
Массив представляет собой переменную для хранения  списка. 
Список - это данные, а массив - переменная. 
В программе можно создать списочное значение, которое не хранится в массиве, но любая переменная массива содержит список.

суббота, 21 августа 2010 г.

Mojo 0.999929

Поставил Mojo 0.999929.
Все хочу подробнее "поковырять" Mojo и Mojolicious - да вот все времени не хватает =(.

 Для тех кто не знал/забыл - для установки/обновления этого замечательного Perl-фреймворка введите (ubuntu):

sudo cpanp install  Mojo

пятница, 20 августа 2010 г.

Ассоциативность операторов в Perl

Я уже и забыл, что есть такая штука как "ассоциативность" операторов и что она бывает правая и левая. Ассоциативность определяет в какой последовательности выполняются операторы с одинаковым приоритетом.

Пример:

5**6**8 # в какой последовательности будет выполнено возведение в степень ?
Правильный ответ:

5**(6**8)  # так как опертатор ** имеет правую ассоциативность
В "книге с ламой" очень правильно написано:

Нужно ли заучивать таблицу приоритетов и ассоциативности ?  
НЕТ!
Никто этого не делает!

Если возникает неоднозначность - просто используйте скобки!
Тем самым вы облегчите жизнь тому, кто будет поддерживать ваш код!

Perl от ActiveState