in reply to Padding search results with context

I'd construct the @padded list in one go by combining the map with a grep each for the tasks of keeping things within range and removing duplicates. I'd also use a hash to keep track of which lines to highlight.

use strict; use warnings; my @nums = (1, 5, 6, 8, 15, 20); my $max = 21; my $pad = 1; my %highlight; @highlight{@nums} = (1) x @nums; my @padded; { my %seen; @padded = grep { ! $seen{$_} ++ } grep { $_ >= 1 && $_ <= $max } map { $_ - $pad .. $_ + $pad } @nums; } print $highlight{$_} ? qq{Highlighted: $_\n} : qq{$_\n} for @padded;

Produces

Highlighted: 1 2 4 Highlighted: 5 Highlighted: 6 7 Highlighted: 8 9 14 Highlighted: 15 16 19 Highlighted: 20 21

I hope this is of use.

Cheers,

JohnGG