免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3117 | 回复: 12
打印 上一主题 下一主题

怎么样动态注入一段代码来运行 [复制链接]

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-12 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-26 12:17 |只看该作者 |倒序浏览

  1. sub call(&$)
  2.   {
  3.                 my ($code, $para, $file, $re) = @_;
  4.              $processResult= $code->($para);
  5.                 print $processResult;
  6.                
  7.   }
  8.   

  9. my $para= "http://bbs.chinaunix.net";

  10. call  {
  11.       my $para=shift;
  12.           print "\npara is ".$para;
  13.           
  14.           return "\n$para  changed to -> ".uc($para)." ";
  15.           
  16.       
  17.    } $para;
复制代码
这相当于把一段代码当成参数传进去执行,但只能这样硬编码,有没有办法,可以从单独的文件读进来 然后再插入进去

论坛徽章:
0
2 [报告]
发表于 2013-05-26 18:30 |只看该作者
eval不行吗?或者读进来存为一个字符串传进去?

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-12 06:20:00
3 [报告]
发表于 2013-05-26 19:51 |只看该作者
这是个结构,不是变量

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
4 [报告]
发表于 2013-05-27 00:14 |只看该作者
picbhan 发表于 2013-05-26 14:30
eval不行吗?或者读进来存为一个字符串传进去?

学习~ 3Q~

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
5 [报告]
发表于 2013-05-27 08:37 |只看该作者
perl是脚本语言,动态支持是天然的
变量\结构\甚至函数都可以动态生成和加载
而且,结构和函数本身也是一种变量

论坛徽章:
3
摩羯座
日期:2013-09-04 12:01:36申猴
日期:2013-10-23 12:12:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34
6 [报告]
发表于 2013-05-27 09:57 |只看该作者
  1. &$
复制代码
这个是啥意思啊

论坛徽章:
0
7 [报告]
发表于 2013-05-27 10:39 |只看该作者
回复 6# grshrd49

perldoc perlvar
......
$&      The string matched by the last successful pattern match (not
            counting any matches hidden within a BLOCK or "eval()" enclosed
            by the current BLOCK).

            The use of this variable anywhere in a program imposes a
            considerable performance penalty on all regular expression
            matches. To avoid this penalty, you can extract the same
            substring by using "@-". Starting with Perl 5.10, you can use
            the "/p" match flag and the "${^MATCH}" variable to do the same
            thing for particular match operations.

            This variable is read-only and dynamically-scoped.

            Mnemonic: like "&" in some editors.

论坛徽章:
3
摩羯座
日期:2013-09-04 12:01:36申猴
日期:2013-10-23 12:12:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34
8 [报告]
发表于 2013-05-27 10:51 |只看该作者
本帖最后由 grshrd49 于 2013-05-27 10:52 编辑

回复 7# brantc


    反了啊 ,
我知道$&是获取正则中最后一次匹配的字符串
但是楼主那个函数中传的参数是 &$  诶
费解啊 手误?还是什么奇怪的特殊标量呢

论坛徽章:
1
辰龙
日期:2014-05-15 19:37:15
9 [报告]
发表于 2013-05-27 11:35 |只看该作者
回复 8# grshrd49

brantc 的答案是错的,在函数中的这个叫函数原型。
   

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-12 06:20:00
10 [报告]
发表于 2013-05-27 13:48 |只看该作者
回复 5# laputa73
  1. sub call(&$)
  2.   {
  3.                 my ($code, $para, $file, $re) = @_;
  4.              $processResult= $code->($para);
  5.                 print $processResult;
  6.                
  7.   }
  8.   
  9. my $code;
  10. open FH,'test.pl';
  11. do {local $/;$code=<FH>;};
  12. print $code;
  13. my $para= "http://bbs.chinaunix.net";

  14. call eval($code)   $para;
复制代码
Type of arg 1 to main::call must be block or sub {} (not eval "string")
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP