use v5.30; use strict; use warnings; { my $add = 0; sub getter { $add } sub counter { my @nums = (1..500); for my $num (@nums) { $add += $num; } } } counter(); say "getter => ", getter(); #### use v5.30; use strict; use warnings; sub counter { my $add = 0; my @nums = (1..500); for my $num (@nums) { $add += $num; } return $add; } my $got = counter(); say "got => ", $got; #### { my $foo = 123; sub myfunc { ...; } } #### sub myfunc { state $foo = 123; ...; } #### { my $foo; sub myfunc { $foo ||= 123; ...; } }