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

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

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

п.с. Парсер блогера вырезает строку STDIN, заключенную в знаки <> =(

1.

use strict;
use warnings;
use 5.010;
say 'Enter some lines!';
my @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 = ); 
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";

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’
];

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

Flash-сообщения

Прикрутил к нашему самописному Perl-овому движку возможность использовать flash-сообщения.

Алгоритм прост:
1. Записать сообщение в сессию.
2. При следующем чтении этого сообщения — удалить его из сессии.

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