История изменений
Исправление Olegymous, (текущая версия) :
Всё просто, это типичный пример использования замыкания
for my $url (@urls) {
http_head $url, sub {
# do smth
warn "$url - finished"; # right $url available here
}
}
Т.к. на каждой итерации $url создаётся через my, то по идеи она в конце итерации должна быть уничтожена, но т.к. она используется внутри коллбека, то в нём остается жива. При этом на следующей итерации создаётся новая $url, но это не затрагивает ту, что уже используется в коллбеке. В итоге в каждом коллбеке правильный $url.
Исправление Olegymous, :
Всё просто, это типичный пример использования замыкания
for my $url (@urls) {
http_head $url, sub {
# do smth
warn "$url - finished"; # right $url available here
}
}
Т.к. на каждой итерации $url создаётся через my, то по идеи она в конце итерации должна быть уничтожена, но т.к. она используется внутри коллбека, то в нём остается жива. При этом на следующей итерации создаётся новая $url, но это не затрагивает ту, что уже используется в коллбеке. В итоге в каждом коллбеке правильный $url.
Исходная версия Olegymous, :
Всё просто, это типичный пример использования замыкания
for my $url (@urls) {
http_head $url, sub {
# do smth
warn "$url - finished"; # right $url available here
}
}
Т.к. на каждой итерации $url создаётся через my, то по идеи она в конце итерации должна быть уничтожена, но т.к. она используется внутри коллбека, то в нём остается жива. При этом на следующей итерации создаётся новая $url, но это не затрагивает ту, что уже используется в коллбеке. В итоге в каждом коллбеке правильный $url.