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>

Reply via email to