http://www.perlmonks.org?node_id=509399


in reply to changing the position of an element in an array

my $pos; for (0..$#array) { $pos=$_ and last if $array[$_] eq $wanted; } @array[$pos,-1]=@array[-1,$pos];

And what if no one of them matched? (Left as an exercise to the reader)

Update: it was a wonderfully neat solution (which is the reason why I posted it!) to another problem!!

Not just as neat:

my $pos; for (0..$#array) { $pos=$_ and last if $array[$_] eq $wanted; } @array=@array[0..$pos-1, $pos+1..$#array, $pos];

And what if no one of them matched? (Left as an exercise to the reader ;-)

But then if you are sure in advance that one and only one element will match, here's a neat concise solution:

@array=((grep $_ ne $wanted, @array), $wanted);
You can patch it so that it works also if the above conditions are not verified, but won't be just as elegant. (Also left as an exercise to the reader!)