JimSi has asked for the wisdom of the Perl Monks concerning the following question:

Was trying to figure out this myself, but failed. For the connection wrapper - IO::Socket::Socks::Wrapper, is there a way to use variables for configuration? Example, instead 'localhost' -> $host? It does not work if I am trying to pass vars in the wrapper declaration at all, but constants or hardcoded values works just fine. Thank you.
# we can wrap packages that uses bult-in connect() # Net::Telnet for example use IO::Socket::Socks::Wrapper ( Net::Telnet => { _norequire => 1, # should tell do not load it # because buil-in connect should be overrided # before package being compiled ProxyAddr => 'localhost', ProxyPort => 1080, SocksDebug => 1 } ); use Net::Telnet; # and load it after manually

Replies are listed 'Best First'.
Re: IO::Socket::Socks::Wrapper - settings from variables
by kcott (Archbishop) on Apr 29, 2015 at 02:43 UTC

    G'day JimSi,

    use loads modules at compile time. For your variable to work as expected, it would need to initialised also at compile time and prior to calling use.

    You haven't shown the code that failed. Is it something like this (I'm just using the BEGIN block to emulate your use statement):

    #!/usr/bin/env perl -l use strict; use warnings; my $host = 'localhost'; BEGIN { print 'Host: ', $host; }

    Producing output like:

    $ pm_1125079_begin_before_use.pl Use of uninitialized value $host in print at ./pm_1125079_begin_before +_use.pl line 9. Host:

    Here's how you could fix that:

    #!/usr/bin/env perl -l use strict; use warnings; my $host; BEGIN { $host = 'localhost'; } BEGIN { print 'Host: ', $host; }

    Which now outputs the wanted value:

    $ pm_1125079_begin_before_use.pl Host: localhost

    That may lead you to a solution. If it doesn't, please post the actual code that is failing as well as all output you receive. Guidelines for what information to post with your question can be found at: How do I post a question effectively?.

    -- Ken

      unfortunately I did not explain right - I am trying to load parameters for "use" from configuration file, using Config::Simple module. The call to Config::Simple will be like
      my $cfg = new Config::Simple($configuration_file_from_commandline); use IO::Socket::Socks::Wrapper ( Net::POP3 => { ProxyAddr => $cfg->param('servername'), ProxyPort => $cfg->param('serverport'), } );
      I assume BEGIN should work for Config::Simple case as well, will try it later. Thanks.
Re: IO::Socket::Socks::Wrapper - settings from variables
by hdb (Monsignor) on Apr 29, 2015 at 09:47 UTC

    I have not used IO::Socket::Socks::Wrapper myself but the documentation mentions an import function that allows you to set the parameters at a later stage, not at use-time.