JM:I have a dream,期待和你一起去实现!
原文及译文
JM
网友:Sanjay

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

推荐:想去Google查资料?(你懂的)想建站?想测试?想挂机?想折腾?想要高性价比的服务器?点我!!


如何插入变量来从模块中调用Perl函数?(How do I interpolate variables to call a Perl function from a module?)

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

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

 perl try.pl MODULE1 Display 

我想要这样的一些事情,但它不工作,请引导我:

use $ARGV[0];
& $ARGV[0]::$ARGV[1]();

Requirement is to pass module name and function name from the command-line argument. I need to get the command-line argument in the program and I need to call that function from that module

For example, calling a try.pl program with 2 arguments: MODULE1(Module name) Display(Function name)

 perl try.pl MODULE1 Display 

I want to some thing like this, but its not working, please guide me:

use $ARGV[0];
& $ARGV[0]::$ARGV[1]();

解决方案(由网友cjm提供)

假设这个函数不是一个类方法,试试这个:

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

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

eval "use $package (); ${package}::$function()";
die $@ if $@;

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


Assuming the function is not a class method, try this:

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

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

eval "use $package (); ${package}::$function()";
die $@ if $@;

Keep in mind that this technique is wide open to code injection. (The arguments could easily contain any Perl code instead of a module name.)


推荐:想去Google查资料?(你懂的)想建站?想测试?想挂机?想折腾?想要高性价比的服务器?点我!!


关于站长

JMJavaMethod的缩写,苦逼码农一个,一直想有番作为,奈何人老力衰,只能四处膜拜大佬以获得动力。已经从单机、局域网、互联网、混到了移动互联网,未来希望能在AI世界里继续混下去。这辈子有个终极目标:财务自由,心灵自由。

近期公告

一个人苦逼开发多日,网站终于正式上线,求关注!!! 一个人苦逼多日,终于正式上线,求关注!!!

找他  
猜你喜欢
想建站?想测试?
想挂机?想折腾?
想去Google查资料?(你懂的)
想要高性价比的服务器?
搬瓦工VPS - 性价最高的美国便宜VPS主机
友情链接

冀ICP备17016304号 版权所有 © JavaMethod.com All Rights Reserved,Theme by 拼图