in reply to popup_menu CGI.pm problems

Thanks, the ino on the reference got my simple example working. Now I'm working on the more complex version where I have:

%OS_APP_NAME = (
        'AA'  => 'HP-UX',
        'AB'  => 'SunOS',
        'AD'  => 'Linux',
        'AJ'  => 'Windows 2000',
        'AK'  => 'Apache',
        'AM'  => 'IIS',
        'AP'  => 'VMware',
        'AR'  => 'Windows 2003',
        'E'   => 'AIX',
        'MC'  => 'ControlM',
        'QD'  => 'DYNIX',
        'X'   => 'Tandem'
);

to create the hash, and this to use it:

 $CGI->popup_menu(-name=>'TECH_SPEC_ID',
                  -values=>\%OS_APP_NAME);

When I run this, it does not generate a select at all, and I get no errors from PERL. In the perl debugger, I can stop it on this line and print the hash to verify it was built properly. Does anybody see a problem?

Replies are listed 'Best First'.
Re^2: popup_menu CGI.pm problems
by kyle (Abbot) on Jan 19, 2007 at 18:23 UTC

    $CGI->popup_menu returns a string that you have to print yourself. This seems to work when I run it:

    #!/usr/bin/perl -w use CGI; my $CGI = CGI->new(); %OS_APP_NAME = ( 'AA' => 'HP-UX', 'AB' => 'SunOS', 'AD' => 'Linux', 'AJ' => 'Windows 2000', 'AK' => 'Apache', 'AM' => 'IIS', 'AP' => 'VMware', 'AR' => 'Windows 2003', 'E' => 'AIX', 'MC' => 'ControlM', 'QD' => 'DYNIX', 'X' => 'Tandem' ); print $CGI->popup_menu(-name=>'TECH_SPEC_ID', -values=>\%OS_APP_NAME);

    If the missing print is not the problem, I don't know what is.

Re^2: popup_menu CGI.pm problems
by kmullin5016 (Acolyte) on Jan 19, 2007 at 19:59 UTC
    Thanks for being my 2nd pair of eyes. I added the print (duh!)
      OK, on the same lines, I notice that the order of the options is random, and on of my books says that, but the CGI doc contained in perl doc format in the CGI.pm module itself doesn't.

      I'm thinking that if I give it an ARRAY reference for the -values parameter, the order will be the same as in the array, and they I can give it a hash in the -labels parameter to contain the actual values I want my select to return to the CGI when a user selects a value.

      I try that with the following code:

      %menu_labels = ('one'=>'eenie',
                      'two'=>'meenie',
                      'three'=>'minie');
      @menu_values = ('eenie', 'meenie', 'minie');
      print $CGI->popup_menu(-name=>'menu_name',
                  -values=>\@menu_values\,
                  -labels=>\%menu_labels);
      

      which generates:

      <select name="menu_name">
      <option value="eenie">eenie</option>
      <option value="meenie">meenie</option>
      <option value="minie">minie</option>
      </select>
      

      which is close, the order is determined by the array, but I don't have the values from my label parameter (the hash). So again, what am I doning wrong. I'm frustrated because I'm finding incomplete/contradictory information in my book (Learning Perl by O'Reilly))and the Perl doc from CGI.pm.

        The popup_menu method wants an array of values (which will be passed back to you by the browser), and optionally an associative array that maps those values to labels (which will be what the user sees). Your associations are reversed, however. The contents of the values array should be keys in the labels hash, but you have your labels as keys instead. So, I think what you're shooting for here is:

        %menu_labels = ('one'=>'eenie', 'two'=>'meenie', 'three'=>'minie'); @menu_values = ('one', 'two', 'three'); print $CGI->popup_menu(-name=>'menu_name', -values=>\@menu_values, -labels=>\%menu_labels);

        ...unless you mean for the user to see "one, two, three". In that case:

        %menu_labels = ( eenie => 'one', meenie => 'two', minie => 'three', ); @menu_values = qw( eenie meenie minie ); print $CGI->popup_menu(-name => 'menu_name', -values => \@menu_values, -labels => \%menu_labels);

        About your bracket problem, have a look at Writeup Formatting Tips (specifically, put <code>...</code> tags around your code).

      A reply falls below the community's threshold of quality. You may see it by logging in.