my %seen; ### sub printGroups { my ($groups, %groupData) = @_; for my $group (sort @$groups) { next if !exists $groupData{$group}; if (!$seen{$groupData{$group}{line}}++) ### { ### print $groupData{$group}{line}; print @{$groupData{$group}{data}} if $groupData{$group}{data}; printGroups($groupData{$group}{groups}, %groupData) if exists $groupData{$group}{groups}; } ### } } =prints access-list INSIDE_IN extended permit tcp object-group DNS-CLIENT object-group DNS-SERVER object-group DNS_TCP object-group network DNS-CLIENT group-object PC1_1st group-object PC2_1st object-group network PC1_1st network-object host 10.1.1.11 object-group network PC2_1st network-object host 10.1.1.12 object-group network DNS-SERVER network-object host 10.1.1.5 object-group service DNS_TCP tcp port-object eq domain access-list INSIDE_IN extended permit udp object-group DNS-CLIENT object-group DNS-SERVER object-group DNS_UDP object-group service DNS_UDP udp port-object eq domain =cut