Hello, I fixed it, the string would initially contain special characters such as % signs. I strip out all the characters before the check, instead of after.
Michael. On Wed, 2005-03-30 at 16:19 -0700, Michael Gale wrote: > Hello, > > I tried your example, it worked as expected, here is the entire code: > > --snip-- > > my @servers; > my $each_server; > my $each_host; > my %seen = ( ); > > print "<h2>List of systems being performance monitored</h2>\n"; > print "Please select a host\n"; > > opendir(RRDDIR,"/home/nagios/network-monitor/nagiosgraph/rrd") > || die "Can't find servers"; > @servers = readdir(RRDDIR); > closedir RRDDIR; > > sub show_host{ > my($each_host) = @_; > my $thost; > $each_host =~ /(.*)_(.*)_/; > $thost = $1; > $thost =~ s/\%2D/ /g; > #print "$thost<BR>\n"; > print "<option value=\"$thost\">$thost\n"; > } > > print "<form name=serverlist action=layout.cgi > method=GET>\n"; > print "<select name=server size=10>\n"; > > foreach my $each_server(@servers) > { > unless ($seen{$each_server}) { > $seen{$each_server} = 1; > show_host($each_server); > } > } > > print "</select>\n"; > print "</form>\n"; > > --snip-- > > On Wed, 2005-03-30 at 18:12 -0500, Offer Kaye wrote: > > On Wed, 30 Mar 2005 15:53:25 -0700, Michael Gale wrote: > > > > > > But it is not working as expected, even if the array has the first three > > > entries the same, the function "show_host" gets called three time ? > > > > > > foreach $each_server(@servers) > > > { > > > unless ($seen{$each_server}) { > > > $seen{$each_server} = 1; > > > show_host($each_server); > > > } > > > } > > > > > > > The code is okay. Try just the following in a standalone file: > > ########## begin code > > use strict; > > use warnings; > > my @servers = qw/a a a b c d/; > > my %seen; > > foreach my $each_server(@servers) { > > unless ($seen{$each_server}) { > > $seen{$each_server} = 1; > > show_host($each_server); > > } > > } > > sub show_host { > > print "$_[0]\n"; > > } > > ########## end code > > If you run it, you will see it just prints "a" once, not 3 times. > > So the problem is in some other code you are not showing us. > > -- > > Offer Kaye > > > -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>