我工作中的网络人员正在应用升级和补丁,有时会导致我的 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)
我不会采用任何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
以及您需要的任何其他选项)创建它们,您还可以扩展它并创建不同的函数。
您可能需要传递-I
toperl
以便 Perl 找到您的模块。例如,如果两者位于同一目录中:
perl -I. example.pl
Run Code Online (Sandbox Code Playgroud)