#!/usr/bin/perl use strict; use warnings; my $pattern = qr/^((?katze)|(?hund)):(?[^,]+),(?()(?\d+),)(?w|m)/; blub("hund:waldi,23,m"); blub("katze:rosa,w"); sub blub { my $string = shift; print "-"x20; print "\nString:\t\t$string\n"; if ($string =~ $pattern) { print "Tier:\t\t"; if (defined($+{k})) { print "$+{k}\n"; } elsif (defined($+{h})) { print "$+{h}\n"; } print "Name:\t\t$+{n}\n" if (defined($+{n})); print "Gewicht:\t$+{g}kg\n" if (defined($+{g})); print "Geschlecht:\t$+{x}\n" if (defined($+{x})); } else { print "no matches...\n"; } }