如何插入变量以从模块调用Perl函数?

San*_*jay 2 variables perl interpolation

要求是从命令行参数传递模块名称和函数名称.我需要在程序中获取命令行参数,我需要从该模块调用该函数

例如,使用2个参数调用try.pl程序:MODULE1(模块名称)显示(函数名称)

 perl try.pl MODULE1 Display 
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西,但它不起作用,请指导我:

use $ARGV[0];
& $ARGV[0]::$ARGV[1]();
Run Code Online (Sandbox Code Playgroud)

cjm*_*cjm 9

假设该函数不是类方法,请尝试以下方法:

#!/usr/bin/perl
use strict;
use warnings;

my ( $package, $function ) = @ARGV;

eval "use $package (); ${package}::$function()";
die $@ if $@;
Run Code Online (Sandbox Code Playgroud)

请记住,这种技术对代码注入是开放的.(参数可以很容易地包含任何Perl代码而不是模块名称.)


小智 7

有很多方法可以做到这一点.其中之一是:

#!/usr/bin/perl
use strict;
use warnings;

my ( $package, $function ) = @ARGV;

eval "use $package; 1" or die $@;

$package->$function();  
Run Code Online (Sandbox Code Playgroud)

注意函数的第一个参数是$ package.