for vs. given

| 1 комментарий

Иногда вместо given удобно использовать for, например, чтобы сделать несколько проверок для каждого элемента массива.

Однако, эта легкость замены дает ложное ощущение возможности и обратного — использования given вместо for.

Есть такой старый трюк, когда for нужен лишь для того, чтобы топикализировать переменную и с легкостью пользоваться функциями, по умолчанию использующими $_.

Например:

for ($url) {
    s{\.?*}{};
    s{^/}{};
    s{/$}{};
}

Фактически никакого цикла здесь нет, и уж если подключен use 5.10, хочется использовать given. Однако, не тут-то было. Хотя given и создаст переменную $_, но она будет всего лишь лексической переменной в пределах блока given, а не синонимом $url.

use v5.10;
use strict;

my $string = 'Hello, Perl';
my $another = $string;

for ($string) {
    s/Hello/Hallo/;
    s/Perl/C++/;

}

given ($another) {
    s/Hello/Hi/;
    s/Perl/JavaScript/;

}

say $string;  # Hallo, C++
say $another; # Hello, Perl

Этот пример выведет измененную строку после блока с for и неизменную — после given. Будьте внимательны :-)

1 комментарий

Неожиданно :)

Комментировать

Страницы

  • img

Об этой записи

Сообщение опубликовано 29.03.2010 00:01. Автор — ash.

Предыдущая запись — Понимание блогов мира Perl

Следующая запись — CPAN vs. GitHub

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.