# loop through, 'nibbling' at logfile with every # successful match & replacement while( $log =~ s{ \[ ([^\]]+?) \] \s+ Player\: \s+ ([^\x20]+?) \s+ \( uid: \s+ (\w+) \) \x0D?\x0A \[ [^\]]+? \] \s+ Score: \s+ (\d+) \x0D?\x0A \[ [^\]]+? \] \s+ Kills: \s+ (\d+) \x0D?\x0A \[ [^\]]+? \] \s+ Deaths: \s+ (\d+) \x0D?\x0A \[ [^\]]+? \] \s+ Team \s+ Kills: \s+ (\d+) \x0D?\x0A \[ [^\]]+? \] \s+ Suicides: \s+ (\d+) \x0D?\x0A \[ [^\]]+? \] \s+ Objective: \s+ (\d+) \x0D?\x0A }{}ixms ) { # grab values from regex backreferences $timestamp = $1; $player = $2; $uid = $3; $score = $4; $kills = $5; $deaths = $6; $teamkills = $7; $suicides = $8; $objective = $9; # ...process log entry... }