goto line1; input: { my ( $c) = @_; ...; @_ = ($value ); goto($c); } process1: { my ($input, $c) = @_; ...; @_ = ($result); goto($c); } process2: { my ($input, $c) = @_; ...; @_ = ($result); goto($c); } output: { my ($result ) = @_; ...; } line1: { push(@_, 'line2'); goto input; } line2: { push(@_, 'line3'); goto process1; } line3: { push(@_, 'line4'); goto process2; } line4: { goto output; }