my %oids = map { $1 => $2 if (m/^: (.+?) VALUE: (.+)/) } do { my @a = split /OID/; shift @a; @a }; use Data::Dumper qw(Dumper); print Dumper(\%oids);