use strict;
my $str = 'dog-Cf-Nox1: Porites_lobata_1381 49.126 572 275 8 1 564 1 564 0.0 563
dog-Cf-Nox1: Porites_australiensis_5912 48.776 572 277 8 1 564 1 564 0.0 560
dog-Cf-Nox1: Astreopora_sp_20372 48.776 572 276 9 1 564 1 563 0.0 555
dog-Cf-Nox1: Montastraea_cavernosa_106939 48.148 567 279 7 5 564 6 564 0.0 555
dog-Cf-Nox1: Seriatopora_hystrix_66126 50.000 554 262 7 18 564 19 564 0.0 553
dog-Cf-Nox1: Porites_australiensis_4812 46.946 573 287 6 1 564 1 565 0.0 553
dog-Cf-Nox1: Stylophora_pistillata_7748 49.009 555 268 7 17 564 18 564 0.0 550
dog-Cf-Nox1: Porites_lobata_724 46.435 575 289 7 1 564 1 567 0.0 548
dog-Cf-Nox1: Acropora_digitifera_16260 46.935 571 288 7 1 564 1 563 0.0 538';
my $regex = qr/^.*:\s+([A-Z].*)_(\D+)_(\d+).*/mp;
my $subst = '\\1,\\2,\\3';
my $result = $str =~ s/$regex/$subst/rg;
print "The result of the substitution is' $result\n";
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