use strict; use warnings; use Data::Dumper; my $blub = "hund:bello,12,w"; my $blab = "katze:mini,m"; for ($blub, $blab) { if (/^ (?hund) : (?[^,]*) , (?\d+) , (?m|w) $ | ^ (?katze) : (?[^,]*) , (?m|w) $ /x) { print Dumper \%+; } }