#!/usr/bin/perl use strict; use warnings 'all'; # Given an array and a value, move all elements equal to the # value one position to the left - do a block move if there # are consecutive elements of the value. my @array = (18, 18, 13, 27, 4, 18, 12, 6, 7, 18, 18, 18, 14, 15); my $value = 18; print "@array\n"; @array [do {my $l; reverse map { $value eq $array [$_] ? do {$l = $_ unless defined $l; $_ - 1} : do {$_ = $l if defined $l; undef $l; $_} } reverse 0 .. $#array}] = @array; print "@array\n"; __END__ 18 18 13 27 4 18 12 6 7 18 18 18 14 15 18 18 13 27 18 4 12 6 18 18 18 7 14 15