sub f3 {
print "f3: ", $t1, "\n";
$t1 ++;
};
f3();
}
sub main {
foreach ( 1 .. 10 ) {
f2();
}
} Что покажется на экране?
от 0 до 9
А всё потому что это питоновский стиль. В перле в этом месте юзают анонимные функции: main(); sub f2 { my $t1 = 0; sub { print "f3: ", $t1, "\n"; $t1 ++; } ->(); } sub main { foreach ( 1 .. 10 ) { f2(); } }
У тебя анонимная sub в f2 будет при каждом вызове пересоздаваться. Замыкания не получится
Что значит не получится? А ноль тогда откуда берётся?
не пересоздаётся. sub a { ...; sub b { ... } } -- компилятор создаст a и b сразу в нужном пакете
О чём ты говоришь? f2 вызывается сепаратно и не держит никакого состояния между вызовами
Обсуждают сегодня