FYI...  I've worked through my AppConfig/Getopt problems; here's the necessary fix.

The latest release of the Getopt::Long (2.32) module is able to handle hash arguments 
linked to code, but the current AppConfig module (1.52) hasn't yet been synced w/ the 
fix (so it still suffers from the problem, just in a different way).

For now, here's my short-term workaround for the AppConfig::Getopt module to fix the 
problem (i.e. get it to play nice with the updated 2.32 Getopt::Long module). Edit the 
AppConfig::Getopt module (AppConfig/Getopt.pm), updating the $linkage variable, within 
the '_getopt_state' subroutine, to merge the extra hash value argument back into a 
'key=value' pair.

### example fix for AppConfig::Getopt ###
sub _getopt_state {
....<cut>...

    #my $linkage = sub { $self->set(@_) };
    my $linkage = sub {$_[1] .= "=" . pop() if ( $#_ eq 2 ) ;$self->set(@_)};
### example fix end ###


Hope this helps.

Karl

p.s. Grab the new Getopt::Long module here:
   http://search.cpan.org/author/JV/Getopt-Long-2.32/

** p.p.s. The new AppConfig/Getopt::Long-2.32 symptom is that both the key and value 
are now passed to the linked subroutine by Getopt::Long as two different arguments, 
but AppConfig::State.pm expects them as a combined "key=value" argument -- so now the 
VALUE is lost. (Just the opposite of what happens when bound to Getopt::Long-2.19.)  
The AppConfig::Getopt fix above will merge the values back into a 'key=value' pair 
before shipping them off to AppConfig::State's set() method.


  ----- Original Message ----- 
  From: Karl Kaufman 
  To: [EMAIL PROTECTED] 
  Sent: Monday, August 26, 2002 4:45 PM
  Subject: Having problems with AppConfig::Getopt module



  Hello,

  I'm trying to use the 'AppConfig::Getopt' module to parse my command-line arguments, 
assigning the passed values to a hash.  It's not working.  And I need help.

  For example:

    # test.pl -pagerdest [EMAIL PROTECTED]

  Should result in:

    %pagerdest = {
       'karl' => '[EMAIL PROTECTED]'
    };

  but, instead, I end up with:

    %pagerdest = {
       '[EMAIL PROTECTED]' => undef
    };


  It looks like there's a problem with how AppConfig is linking the values back from 
Getopt::Long.  Getopt::Long appears to be stripping out the "key=" portion of the 
hash's argument -- if the linkage reference is 'CODE' rather than 'HASH'.

  The following code snippet provides an example of how AppConfig is receiving changes 
from Getopt::Long; and the example below shows the loss of the hash key from the 
arguments.

  Any idea how to fix the problem?  Or where else to search for an answer?

  Thanks in advance.

  Regards,
  Karl K.


  #####  code example #####
  use Getopt::Long;

  $linkage = sub { print "@_\n"; };

  Getopt::Long::Configure('debug');
  GetOptions("pagerdest=s%" => $linkage);
  ##### end of code example ###### 


  Example debug output -- 

  # ./test.pl -pagerdest [EMAIL PROTECTED]

  GetOpt::Long 2.19 called from package "main".
    GetOptionsAl $Revision: 2.20 $
    ARGV: (-pagerdest [EMAIL PROTECTED])
    autoabbrev=1,bundling=0,getopt_compat=1,order=1,
    ignorecase=1,passthrough=0,genprefix="(--|-|\+)".
  => link "pagerdest" to CODE(0xcd370)
  => $opctl{"pagerdest"} = "=s%"
  => option "-pagerdest"
  => find "-pagerdest", prefix="(--|-|\+)"
  => split "-"+"pagerdest"     
  => 1 hits (pagerdest) with "pagerdest" out of 1
  => found "=s%" for pagerdest 
  => ref($L{pagerdest}) -> CODE 
  => &L{pagerdest}("pagerdest", "[EMAIL PROTECTED]")
  pagerdest [EMAIL PROTECTED]


Reply via email to