LINUX.ORG.RU

История изменений

Исправление 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.