my @ary = (1..4, 6..10); print "@ary\n"; for my $val( 0, 5, 11 ) { bubble( \@ary, $val ); print "@ary\n"; } sub bubble { unshift @{$_[0]}, $_[1]; for my $i( 0..@{$_[0]}-2 ) { last if $_[0]->[$i] <= $_[0]->[$i+1]; ( $_[0]->[$i],$_[0]->[$i+1] ) = ( $_[0]->[$i+1],$_[0]->[$i] ) } } __DATA__ 1 2 3 4 6 7 8 9 10 0 1 2 3 4 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 10 11