use strict;
my $str = 'HK407_02g03400 NP_585950.1 74.539 271 68 1 14 284 1 270 4.68e-143 401
HK407_02g03530 NP_585964.1 86.989 269 35 0 1 269 1 269 0.0 495
HK407_02g03640 NP_585974.1 70.940 117 34 0 5 121 4 120 1.19e-57 171
HK407_02g03700 NP_585980.1 67.722 316 100 2 1 315 1 315 1.31e-164 457
HK407_02g04000 NP_584634.1 73.521 676 174 3 1 671 1 676 0.0 1060
HK407_02g04120 NP_584647.1 68.313 587 185 1 41 626 2 588 0.0 856
HK407_02g04310 NP_584665.1 88.753 409 45 1 1 409 1 408 0.0 759
HK407_02g04360 NP_584670.1 74.351 308 79 0 1 308 1 308 8.75e-168 464
';
my $regex = qr/\s\S.*?\s/mp;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html