Архив метки: Perl

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);

Оператор повторения строк в 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>);

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

Я все время путался в терминах, что такое список и что такое массив в Perl.  
Перечитывая «Изучаем Perl» обнаружил, что там дается простое и понятное определение.

Список содержит упорядоченную коллекцию скалярных значений.

Массив представляет собой переменную для хранения  списка. 

Список — это данные, а массив — переменная. 

В программе можно создать списочное значение, которое не хранится в массиве, но любая переменная массива содержит список.