#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @list=( 'hund:bello,12,w', 'katze:mini,m', 'hund:lessi,8,m', 'katze:kassandra,w', ); for my $line (@list) { $line=~/^(?katze|hund):(?[^,]+),(?:(?\d+),)?(?w|m)$/; $line={%+}; } print Dumper(\@list);