my $name = qr/(\w[\w-]*\w?)/; # any valid hostname segment my $nnam = qr/(($name\.)*$name)/; # one or more "name" segments my @domainnames = ( qr/$nname\.com/ => 'a commercial domain', qr/$nname\.edu/ => 'an educational institution', ); my %domainnames; foreach (0 .. @domainnames/2-1) { $domainnames{$domainnames[$_*2+0]} = { re => $domainnames[$_*2+0], desc => $domainnames[$_*2+1], }; }