Brian
Brian

Reputation: 51

Assign LWP command to Perl variable

The network guys at my work are applying upgrades and patches that sometimes cause my LWP to error out with http status 500.

I have about 50 Perl apps with the below line of code. Instead of changing all 50 apps each time security protocols change, I'd like to use a variable. However, I can't seem to hit on the right way to assign the LWP to a variable.

Current code that works:

my $ua = LWP::UserAgent->new(ssl_opts =>{ verify_hostname => 0 });

Want to do this, but keep getting errors:

my $lwp = "LWP::UserAgent->new(ssl_opts =>{ verify_hostname => 0 })";
my $ua = $lwp;

I plan to put the lwp string in a file or a module, but coded the above for illustrative purposes.

Any advice on how to do this is greatly appreciated.

Tried these, but they did not work:

my $ua = <$LWP>;
my $ua =  eval "\$$LWP";
my $ua = ${$LWP}; `

Upvotes: 0

Views: 102

Answers (2)

Dave Cross
Dave Cross

Reputation: 69224

If you look at the documentation for LWP, you'll see that it recognises an environment variable called PERL_LWP_SSL_VERIFY_HOSTNAME to set the default value for verify_hostname.

So you could just remove the verify_hostname option from all of your calls to LWP::UserAgent->new() and arrange to have the environment variable set correctly before running your application.

Upvotes: 2

Robert
Robert

Reputation: 8506

I wouldn't go with any eval based approach. The code you eval is a String, so you won't get syntax highlighting in your editor, you cannot run perl -c to check it, and there is just no point to eval.

A simpler approach would be to just define a function in a module, e.g., UserAgentMaker.pm that you can use and call:

package UserAgentMaker;

use strict;
use warnings;
use LWP::UserAgent;

sub get_lwp {
    return LWP::UserAgent->new(ssl_opts =>{ verify_hostname => 0 });
} 

1;

Then use it:

use strict;
use warnings;
use UserAgentMaker;

my $ua = UserAgentMaker::get_lwp();
# use $ua

You can also extend this and create different get_lwp functions if clients need to create them with different options, like a get_legacy_lwp, get get_tls_1_1_lwp and whatever else you need.

You may need to pass -I to perl so that Perl finds your module. For example, if both are in the same directory:

perl -I. example.pl

Upvotes: 6

Related Questions