免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: hitsubunnu
打印 上一主题 下一主题

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

论坛徽章:
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
21 [报告]
发表于 2009-02-17 22:16 |只看该作者
原帖由 DQP 于 2009-2-17 17:08 发表
谢谢
大概理解了

你上面的例子调通了么?

论坛徽章:
0
22 [报告]
发表于 2009-02-19 11:21 |只看该作者

回复 #21 MMMIX 的帖子

通了 谢谢
而且看到了一种原先没用过的写法: local 的file handle

  1. sub glob {
  2.   my $pat = shift;
  3.   my @got;
  4.   local(*D);
  5.   if (opendir D, '.') {
  6.     @got = grep /$pat/, readdir D; closedir D;
  7.   }
  8.   @got;
  9. }
复制代码

看来我需要重新找本Perl的书读了。。。。。。。

论坛徽章:
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
23 [报告]
发表于 2009-02-19 11:35 |只看该作者
原帖由 DQP 于 2009-2-19 11:21 发表

看来我需要重新找本Perl的书读了。。。。。。。

看手册吧。

论坛徽章:
0
24 [报告]
发表于 2009-02-19 11:59 |只看该作者
原帖由 DQP 于 2009-2-19 11:21 发表
通了 谢谢
而且看到了一种原先没用过的写法: local 的file handle

sub glob {
  my $pat = shift;
  my @got;
  local(*D);
  if (opendir D, '.') {
    @got = grep /$pat/, readdir D; closedir ...


麻烦 贴一下怎么包的 open

论坛徽章:
0
25 [报告]
发表于 2009-02-19 13:13 |只看该作者
use Hook::LexWrap;

wrap 'my_open', pre => sub {print @_;};

sub my_open {}


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

open(FF,$file1);
my_open(FF,$file1);
while(<FF>){
   print;
}
close(FF);

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


你在每个 open 语句下面再 copy 一个 my_open :mrgreen:

论坛徽章:
0
26 [报告]
发表于 2009-02-19 13:36 |只看该作者
原帖由 cobrawgl 于 2009-2-19 13:13 发表
use Hook::LexWrap;

wrap 'my_open', pre => sub {print @_;};

sub my_open {}


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

open(FF,$file1);
my_open(FF,$file1);
while(){
   print;
...


谢谢  :wink:

兄弟这个和


  1. open(FF,$file1);
  2. 下插入一个
  3. print $file1;

复制代码


效果差不多

[ 本帖最后由 hitsubunnu 于 2009-2-19 13:45 编辑 ]

论坛徽章:
0
27 [报告]
发表于 2009-02-19 14:34 |只看该作者

回复 #24 hitsubunnu 的帖子

我是这么做的
再单独写个文件

  1. sub my_open{
  2.   print @_, caller(), "\n";
  3.   open($_[0], $_[1]);
  4. }
  5. *CORE::GLOBAL::open = \&my_open;

  6. do 'your_program.pl';


  7. ------------------------- your_program.pl ------------

  8. open my $fh, "<cut.pl";
  9. print <$fh>;
  10. print "end\n";

复制代码

这样就不需要修改源文件了
或者可以将override open的代码写成个pm然后在debug时require进来
希望有帮助。。。

[ 本帖最后由 DQP 于 2009-2-19 14:38 编辑 ]

论坛徽章:
0
28 [报告]
发表于 2009-02-19 14:45 |只看该作者
谢谢

论坛徽章:
0
29 [报告]
发表于 2009-02-19 15:35 |只看该作者
原帖由 DQP 于 2009-2-19 14:34 发表
我是这么做的
再单独写个文件

sub my_open{
  print @_, caller(), "\n";
  open($_[0], $_[1]);
}
*CORE::GLOBAL:pen = \&my_open;

do 'your_program.pl';


------------------------- your_ ...



非常感谢

论坛徽章:
0
30 [报告]
发表于 2009-02-19 15:52 |只看该作者
use Data::Dumper;

use subs 'open';

sub open {
  print Dumper [@_];
  CORE::open($_[0], $_[1]);
}

open FILE, '>test.txt';

print FILE "Hello, World...\n";

[ 本帖最后由 cobrawgl 于 2009-2-19 15:59 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP