免费注册 查看新帖 |

Chinaunix

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

用什么模块可以分析出 perl程序的 输入和输出文件的文件名 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-16 16:02 |只看该作者 |倒序浏览
我现在要实现一个功能  用perl 分析 perl的程序

有没有能分析perl调用数据情况的模块  

譬如:
程序test.pl

  1. my $file1 = '/home/xxx/';
  2. $file1 .=  '1.txt';

  3. open(FF,$file1);
  4. while(<FF>){
  5.    print;
  6. }
  7. close(FF);

  8. open(FF,">/home/xxx/xxx.tmp");
  9. print FF "testste";
  10. close(FF);

复制代码


我怎么能方便的得到 输入  /home/xxx/1.txt  和  输出/home/xxx/xxx.tmp 这两个文件的文件名

我找了 cpan 在 Devel::* 下的一些模块  没发现

有没有什么好方法 可以像  perl -d* test.pl  然后生成一个报告

btw: 请教过一位朋友 用 PERLDB_OPTS="NonStop frame=1 AutoTrace LineInfo=tperl.out" perl -dlane 'print $F[0]' /etc/xxx 可以求出一些信息
再分析  虽然能实现但是  不是特别方便

[ 本帖最后由 hitsubunnu 于 2009-2-16 17:31 编辑 ]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
2 [报告]
发表于 2009-02-16 17:18 |只看该作者

回复 #1 hitsubunnu 的帖子

perldoc File::Basename

论坛徽章:
0
3 [报告]
发表于 2009-02-16 17:30 |只看该作者
原帖由 ly5066113 于 2009-2-16 17:18 发表
perldoc File::Basename


不好意思没说清楚  我想要知道所有用open打开的所有文件的文件名

这个模块是 知道用open打开的是哪个文件后 再利用这个模块 找出路径和文件名  没有办法用去取得 open打开的是文件名

谢谢诶

[ 本帖最后由 hitsubunnu 于 2009-2-16 17:43 编辑 ]

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
4 [报告]
发表于 2009-02-16 17:54 |只看该作者
原帖由 hitsubunnu 于 2009-2-16 17:30 发表
这个模块是 知道用open打开的是哪个文件后 再利用这个模块 找出路径和文件名  没有办法用去取得 open打开的是文件名

这句话好绕啊

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
5 [报告]
发表于 2009-02-16 17:56 |只看该作者
原帖由 hitsubunnu 于 2009-2-16 17:30 发表


不好意思没说清楚  我想要知道所有用open打开的所有文件的文件名

根据 filehandle 找到它对应的文件名?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2009-02-16 17:57 |只看该作者
原帖由 MMMIX 于 2009-2-16 17:56 发表

根据 filehandle 找到它对应的文件名?

而且不是在程序内,是在程序外。

如果运行时间比较长的话,lsof 一把应该会有收获。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
7 [报告]
发表于 2009-02-16 17:59 |只看该作者

回复 #3 hitsubunnu 的帖子

原帖由 flw 于 2008-6-5 13:03 发表
不如说说你取它干什么?

BTW:我的签名里就有这个问题,典型的思路错误。


你要是仍然觉得没道理,那也没办法了。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
8 [报告]
发表于 2009-02-16 18:20 |只看该作者
原帖由 flw 于 2009-2-16 17:57 发表

而且不是在程序内,是在程序外。

即使在程序内,也不太好搞,除非自己写模块重载 open,不然的话,在运行时是无法找到都用 open 打开了哪些文件的,尤其是通过 open my $fh, ... 这种方式打开的文件,其 filehandle 根本就是匿名的,查符号表也查不到。
如果运行时间比较长的话,lsof 一把应该会有收获。

关了以后就查不到了吧?

论坛徽章:
0
9 [报告]
发表于 2009-02-17 00:00 |只看该作者
1.不如说说你取它干什么?

我这儿有一个写了很久很大的程序  没使用数据库   都是直接操作文件的 经过很多人更改过 因为历史问题  没有留下任何文档  现在程序出现问题时只能一行行代码看 经常为了找一个文件是从哪里来的 花费很长时间 所以我现在希望能开发一个类似dubug分析perl的程序 能把程序 调用数据的情况 分析出来

2.根据 filehandle 找到它对应的文件名?

  主要就是想知道  整个程序的  从哪些文件取得的数据  最后生成了哪些文件  把所有调用过的文件记录下来

3.重载open 试验过了  没能实现


我的想法:

1.因为看到devel::* 下有一些可以  测试内存使用情况 或者是 程序执行时间分析的模块

所以我觉得. 应该可能会有一些模块涉及到 对输入输出文件做记录

2. perl在解释执行之前是不是会对文件位置做标记  比如说  open(FF,**) die "$!\n";

在判断 $! 信息 的时候  perl是怎么实现的 ? 是不是能在perl解释执行前  做些事情


有没有谁接触过类似的东西 给个方向我去查一查

[ 本帖最后由 hitsubunnu 于 2009-2-17 00:08 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2009-02-17 00:10 |只看该作者
再试试重载open应该是不错的,或者都将老的open改为您的新Open函数,该Open函数除了open文件外,再记录些您想要的信息。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP