my $replace = sub { push @findmissing, "$bookabbrev\t$1\t$2\t$3\n"; return '' }; foreach (0..$#missingpages) { chomp $missingpages[$_]; my $skipped=$missingpages[$_]; my $before=qq||; my $after=qq||; s/$before.*?(.{0,25})(?\D)(.{0,25}).*?$after/$replace->()/eg for @source; }