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

call sub {
    my ($a, $b) = ...;
    my $i = ...;
    call sub {
        # Видит все $a и $b и остальное.
        my $i = ...
        # Забыл поставить my перед $i и получил ошибку.
        call ...
    }
}

Заменяем на 

sub foo {
    my ($b) = @_;
    # Видит только $b, - только то, что нужно.
    call ...
    
}

call sub {
    my ($a, $b);
    call sub { foo($b) }
}

Так проще получается и меньше ошибок.

P.S.

mod_perl?



________________________________
 From: Mons Anderson <[email protected]>
To: Moscow.pm group <[email protected]> 
Sent: Friday, 26 July 2013, 14:28
Subject: Re: [Moscow.pm] Вакансия: AnyEvent in Mail.ru
 

2013/7/26 ksvs <[email protected]>:
>
> А почему так, а не вот так, например:
>
> call $foo;
> call sub { foo(....) };
>
> так ведь проще...
Не понял этого примера.
опиши свой пример, если это реальные вызовы

for my $url (@urls) {
  http_request GET => "$url/1", sub {
    http_request GET => "$url/2", sub {
      http_request GET => "$url/3", sub {
        ...
      }
    }
  }
}

а так, потому что замыкания.

>
> А почему не голый EV?

Потому что потери на AnyEvent незначительные, а код можно запускать и без EV.

например, внутри апача с Impl::Perl
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить