将 LWP 命令分配给 Perl 变量

Bri*_*ian 0 perl lwp

我工作中的网络人员正在应用升级和补丁,有时会导致我的 LWP 出现 http 状态 500 错误。

我有大约 50 个带有以下代码行的 Perl 应用程序。我不想每次安全协议更改时都更改所有 50 个应用程序,而是想使用一个变量。但是,我似乎无法找到将 LWP 分配给变量的正确方法。

当前有效的代码:

my $ua = LWP::UserAgent->new(ssl_opts =>{ verify_hostname => 0 });
Run Code Online (Sandbox Code Playgroud)

想要这样做,但不断出现错误:

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

我计划将 lwp 字符串放入文件或模块中,但出于说明目的对上述内容进行了编码。

非常感谢任何有关如何执行此操作的建议。

尝试过这些,但它们不起作用:

my $ua = <$LWP>;
my $ua =  eval "\$$LWP";
my $ua = ${$LWP}; `
Run Code Online (Sandbox Code Playgroud)

Rob*_*ert 6

我不会采用任何eval基于的方法。您的代码eval是一个字符串,因此您不会在编辑器中获得语法突出显示,您无法运行perl -c来检查它,并且没有任何意义eval

一种更简单的方法是在模块中定义一个函数,例如,UserAgentMaker.pm您可以use调用:

package UserAgentMaker;

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

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

1;
Run Code Online (Sandbox Code Playgroud)

然后使用它:

use strict;
use warnings;
use UserAgentMaker;

my $ua = UserAgentMaker::get_lwp();
# use $ua
Run Code Online (Sandbox Code Playgroud)

get_lwp如果客户需要使用不同的选项(例如get_legacy_lwp、 getget_tls_1_1_lwp以及您需要的任何其他选项)创建它们,您还可以扩展它并创建不同的函数。

您可能需要传递-Itoperl以便 Perl 找到您的模块。例如,如果两者位于同一目录中:

perl -I. example.pl
Run Code Online (Sandbox Code Playgroud)