use strict; use warnings; while (my $line = ) { if ($line =~ m/^UFRAME/) { my @numbers = $line =~ /([\d.]+)/g; print "UFRAME numbers: @numbers\n"; @numbers = map{sprintf "%.3f",$_}@numbers; print "UFRAME numbers with 3 decimal points: @numbers\n\n"; } } =prints: UFRAME numbers: 3.0 5.6 7.9000999 43.08999 UFRAME numbers with 3 decimal points: 3.000 5.600 7.900 43.090 UFRAME numbers: 2.57777 32.000 54 1 UFRAME numbers with 3 decimal points: 2.578 32.000 54.000 1.000 =cut __DATA__ nonsense UFRAME 3.0, 5.6, 7.9000999, 43.08999 BS UFRAME 2.57777, 32.000,54,1