my $re = do { local *FILE; open(FILE, '<', $regexp_file_name) or die('...'); local $/; qr/@{[]}/ # Compile only once. }; while () { if (@captures = $_ =~ $re) { print(join(', ', @captures), $/); } } __DATA__ abd 123 sdafas 231 gdabd 7364 112 sdafas 785 regexp file (Matches lines with two words of exactly 3 digits.) =========== \b(\d{3})\b.*?\b(\d{3})\b output ====== 123, 231 112, 785