免费注册 查看新帖 |

Chinaunix

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

Perl能否支持通过在字符串来调用函数,类似于C的函数指针 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-06 13:49 |只看该作者 |倒序浏览
看代码吧,想知道Perl是否支持类似的功能:
下面代码当然是不对的,但是否支持类似的呢?

  1. sub fuc
  2. {
  3.         my $str = shift;
  4.         print "Hello, $str!\n";
  5. }

  6. my $cmd_str = "fuc";
  7. $cmd_str "World";
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2010-09-06 13:55 |只看该作者
C 不支持吧。

论坛徽章:
0
3 [报告]
发表于 2010-09-06 13:58 |只看该作者
本帖最后由 wfnh 于 2010-09-06 14:00 编辑

可以的··不过好像要显示&调用~~~不知道有没有其他方法··不用&行不行~~


  1. sub a
  2. {
  3. print $a = shift;
  4. }
  5. $fun = 'a';
  6. &$fun('sdfsd');
复制代码

论坛徽章:
0
4 [报告]
发表于 2010-09-06 14:11 |只看该作者
哦,谢谢各位!先别管C了,函数指针当然不是那么写,先别管它。

试了一下3楼的写法,是可以的,但加上“use strict;”就不行了,请问有啥办法加上use strict也可以呢?

  1. sub fuc
  2. {
  3.         my $str = shift;
  4.         print "Hello, $str!\n";
  5. }

  6. my $cmd_str = "fuc";
  7. &$cmd_str("World");
复制代码

论坛徽章:
0
5 [报告]
发表于 2010-09-06 14:49 |只看该作者
回复 4# finixlei

本来这个就是perl的符号引用~~因为符号引用容易出问题~~strict模式下世不行的·····

所以···一般不这样做···当你需要的时候··可以暂时的打开软引用:
no strict 'refs';
最好再闭合括号里边啦~这样,出了闭合括号又会关闭这个功能~

论坛徽章:
0
6 [报告]
发表于 2010-09-06 15:05 |只看该作者
回复 5# wfnh

very good! Thanks!

  1. use strict;

  2. sub fuc
  3. {
  4.         my $str = shift;
  5.         print "Hello, $str!\n";
  6. }

  7. my $cmd_str = "fuc";

  8. no strict 'refs';
  9. &$cmd_str("World");
  10. $cmd_str->("CAT");
  11. use strict;
复制代码

论坛徽章:
0
7 [报告]
发表于 2010-09-06 16:01 |只看该作者
相当于
soft reference
为啥 strict 要限制它呢?
soft reference 只能访问 symbal table的dd
那个表必须是 global 的。
所以看你的那个 函数定义的位置了
在作外层的main里 当然可以了

论坛徽章:
0
8 [报告]
发表于 2010-09-06 16:07 |只看该作者
...擦
是不是所有sub 都要进入 symbal table呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP