sub g { my ( $a ) = @_; sub f { $a }; return sub { $a = $_[0] }; } push my @setters, g("Hi\n"), g("Bye\n"); print f; # => Hi $setters[0]("Bye\n"); print f; # => Bye $setters[1]("Hi\n"); print f; # => Bye (still)