use 5.010; use strict; use warnings; sub square(&$) { my ($rc, $x) = @_; @_ = ($x * $x); goto &$rc; } sub square_and_say(&$) { my ($rc, $x) = @_; my $square_rc = sub { my $s = shift; say "$x ^ 2 = $s"; @_ = (); goto &$rc; }; @_ = ($square_rc, $x); goto □ } square_and_say { } 2;