免费注册 查看新帖 |

Chinaunix

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

请教一个关于捕获输出的问题????? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-09 16:18 |只看该作者 |倒序浏览
例如程序a.pl内容如下:

  sub abc{
                 print "\033[10;10H Please input: ";
                 $var=<STDIN>;
                 chomp($var);
                 return($var);
  }

  sub ddd{
                 print "\033[12;10H Please input: ";
                 $input=<STDIN>;
                 chomp($input);
                 return($input);
  }

  ($para)=@ARGV;
  abc if($para eq "-K");
  ddd if($para eq "-D");
---------------------------------------------------------------------------------------------
然后我用另外一个程序b.pl中调用a.pl中的函数:
怎么才能获取$var 或 $input 的值呢???

system("a.pl -K");  根本不行.
使用$out=`a.pl -K`; 它并不是先在屏幕指定位置显示Please input: 而且$out什么也没有。

不知我说没说明白:oops:
总之就是用一个程序来调用另外一个程序中的函数,如何取得函数值的问题,使用引用么,我不懂。
请大家帮忙,谢谢

[ 本帖最后由 兰花仙子 于 2005-12-9 17:50 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2005-12-09 18:04 |只看该作者
把a.pl里的return $input改成print $input,然后b.pl里这样调用:

  1. open PIPE,"-|" or exec "perl a.pl -K";

  2. print while(<PIPE>);
复制代码


<PIPE>里就是a.pl传过来的值。

论坛徽章:
0
3 [报告]
发表于 2005-12-12 09:15 |只看该作者
谢谢仙子

不行啊!仙子。
<PIPE>里只有一个1

b.pl调用a.pl中的函数取得值后要做其它事情。


我现在只有把a.pl的函数值保存在临时文件中,b.pl调用时打开临时文件取值,不好啊!!!

[ 本帖最后由 c1l2d3 于 2005-12-12 09:19 编辑 ]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2005-12-12 10:50 |只看该作者

  1. a.pl
  2. #!/usr/bin/perl
  3. print "aabc\n";
复制代码

  1. b.pl
  2. #!/usr/bin/perl
  3. open(FF,"./a.pl|");
  4. while(<FF>){
  5. print $_;
  6. }
复制代码


也可以考慮啦....把abc與ddd抽出來...然後把a.pl與b.pl放在一起.....就不會有這個問題..

论坛徽章:
0
5 [报告]
发表于 2005-12-12 11:01 |只看该作者
原帖由 apile 于 2005-12-12 10:50 发表

  1. a.pl
  2. #!/usr/bin/perl
  3. print "aabc\n";
复制代码

  1. b.pl
  2. #!/usr/bin/perl
  3. open(FF,"./a.pl|");
  4. while(<FF>){
  5. print $_;
  6. }
复制代码


也可以考慮啦....把abc與 ...


为什么$_还是1呢???

是这样,我写了几个函数,这几个函数需要在很多程序中运行,我不想每个程序中都写一遍这些函数,
所想用这个办法,只打印信息的还好,需要取值的就不行了。

还有什么好办法吗??望不吝赐教,谢谢了.

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2005-12-12 13:56 |只看该作者

  1. while(<FF>){
  2. 改成
  3. while(my $data = <FF>){
  4. print "$data\n";
复制代码

另外如果您是windows平台..不清楚为什麽..
我在AIX、Linux下没问题....
perl 5.8.0...

论坛徽章:
0
7 [报告]
发表于 2005-12-12 14:23 |只看该作者
原帖由 apile 于 2005-12-12 13:56 发表

  1. while(<FF>){
  2. 改成
  3. while(my $data = <FF>){
  4. print "$data\n";
复制代码

另外如果您是windows平台..不清楚为什麽..
我在AIX、Linux下没问题....
perl 5.8.0...


我是unix平台,perl 5.6.1
输出仍然是一个"1",
也许是版本的问题,
非常感谢!

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
8 [报告]
发表于 2005-12-12 17:08 |只看该作者
  1. # TCP端口取得
  2. sub getTCPPort{
  3.         my %_CONFIG_PORT;
  4.         open(DOS, "netstat -Na |");
  5.         while($_=<DOS>)
  6.         {
  7.                 if ($_ =~ m/\s+?TCP\s+?([a-z0-9.]+?):([a-z0-9]+?)\s+?/i)
  8.                 {
  9.                         my $key = trim($2);
  10.                         my $value= trim($1);
  11.                         $_CONFIG_PORT{$key} = $value;
  12.                 }
  13.         }
  14.         close(DOS);
  15.         return %_CONFIG_PORT;
  16. }
复制代码


windows下面的演示,其他的系统应该也可以演示的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP