# a recursive approach, similar to BrowserUK's sub swap1 { my @t = ( pop, pop ); ( @_ ? &swap1 : (), @t ) } # an iterative approach sub swap2 { my @t; unshift @t, ( pop, pop ) while @_; @t }