sub double { sub { \@_ }->($_[0], $_[0]) } my $r = double my $v; $v = 1; @$r; # => ( 1, 1 ); $v = 2; @$r; # => ( 2, 2 ); $r->[0] = 3; @$r; # => ( 3, 3 );