#! perl use strict; use warnings; use Data::Dump; my $sci = qr{ \d \. \d{4} E [ -] \d{3} }x; while () { my @fields = / ^ (\w+) \s+ ($sci) \s+ ($sci) \s+ (\w+) \s+ ($sci) $ /x; dd \@fields; } __DATA__ joe 0.0000E 000 9.0720E-001 d23 9.0208E-001 fred 1.2345E-987 2.3456E 456 qrs76 3.4567E 001