免费注册 查看新帖 |

Chinaunix

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

perl 查找子程序所在模块 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2018-03-23 16:55 |只看该作者 |倒序浏览
use 模块 后,可以在本脚本里不加模块名直接通过子程序名调用
如果本脚本use了很多模块,那么我怎么能查到这个子程序属于哪个模块呢。

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
2 [报告]
发表于 2018-03-23 22:50 |只看该作者
每个函数都保存的有自己来自哪的基本信息,暂时就想到用 B 模块查找内部状态,比如你要查找函数 abc,在程序中添加代码

use B();

my $obj = B::svref_2object(\&abc);
print $obj->GV->STASH->NAME; # 定义的模块
print $obj->GV->NAME;   # 原来的函数名,匿名函数的名字是 __ANON__
print $obj->FILE;          # 定义所在的文件

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
3 [报告]
发表于 2018-03-23 22:52 |只看该作者
或者做个模块,起名叫做 sub_from.pm 在你的代码里插入
use sub_from \&abc, \&efg;
它会自动打印出出处,不用了注释掉就行了。

  1. package sub_from;

  2. use 5.010;
  3. use strict;
  4. use warnings;

  5. use B ();

  6. sub import {
  7.     my $class = shift;
  8.     for (@_) {
  9.         if (ref $_) {
  10.             my $obj = B::svref_2object($_);
  11.             if ($obj->isa('B::CV')) {
  12.                 my $package = $obj->GV->STASH->NAME;
  13.                 my $name = $obj->GV->NAME;
  14.                 my $file = $obj->FILE;
  15.                 print "$package\::$name defined at $file\n";
  16.             }
  17.         }
  18.     }
  19. }

  20. 1
复制代码

评分

参与人数 1信誉积分 +10 收起 理由
hztj2005 + 10 很给力!

查看全部评分

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
4 [报告]
发表于 2018-03-28 21:53 |只看该作者
zhlong8 发表于 2018-03-23 22:50
每个函数都保存的有自己来自哪的基本信息,暂时就想到用 B 模块查找内部状态,比如你要查找函数 abc,在程 ...

从来没想过,还有这种功能,Perl好很强大的。

论坛徽章:
0
5 [报告]
发表于 2018-03-29 06:27 |只看该作者
回复 4# fender0107401
微软的VC一向来就有这种功能。



论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
6 [报告]
发表于 2018-03-29 09:04 |只看该作者
回复 4# fender0107401

这算 Perl 的缺陷了,函数是对象的语言里这就是一个属性,我也就是把它转换成对象再查找这个属性而已,绕了一大圈。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP