my %data; while (/\[:([^\]]+)\](.+)\[:\1\]/gis) { $data{$1} = $2; }