1 2 3 4 5 6 a b c #### x y 1 2 3 4 5 6 a b c #### x y a b c 4 5 6 1 2 3 #### $y = $offset_y if $y == @$ary; x y a b c 4 5 6 1 2 3 #### sub do_swaps { my ( $ary, $offset_x, $offset_y, $swaps ) = @_; my ( $x, $y ) = ( $offset_x, $offset_y ); while ( $offset_y != @$ary ) { for ( $offset_x .. ( $offset_y - 1 ) ) { $y = $offset_y if $y == @$ary; my $temp = $ary->[$x]; $ary->[$x] = $ary->[$y]; $ary->[$y] = $temp; $x += 1; $y += 1; $swaps += 1; } ( $offset_x, $offset_y ) = ( $x, $y ); } return $swaps; }