my %seen; # a new global variable ... # then, whenever you 'createElement' and/or 'setAttribute', first assemble the string: #my $materialmapping_item2 = $materialmapping_table_xml->createElement("item3"); #$materialmapping_item2->setAttribute(decode('cp1252',$pr_cell_name2->{Val}),$pr2); my $entry = join',', decode('cp1252',$pr_cell_name2->{Val}),$pr2; # and create it if it doesn't already exist: if (!exists $seen{$entry}++){ my $materialmapping_item2 = $materialmapping_table_xml->createElement("item3"); $materialmapping_item2->setAttribute($entry); }