免费注册 查看新帖 |

Chinaunix

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

输出时缓冲区疑惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-14 22:37 |只看该作者 |倒序浏览
Mastering Perl 上的一个例子

  1. #!/usr/bin/perl
  2. use Devel::Size qw(size);
  3. my $n;
  4. print_message( "Before I do anything" );
  5. print "Size is ", size( \$n );
  6. print_message( "After I assign a string" );
  7. $n = '1';
  8. print "Size is ", size( \$n );
  9. print_message( "After I use it as a number" );
  10. my $m = $n + 1;
  11. print "Size is ", size( \$n );
  12. sub print_message { print "\n", "-" x 50, "\n$_[0]\n", "-" x 50, "\n" }
复制代码
输出:
--------------------------------------------------
Before I do anything
--------------------------------------------------
Size is 24
--------------------------------------------------
After I assign a string
--------------------------------------------------
Size is 56
--------------------------------------------------
After I use it as a number
--------------------------------------------------
Size is 64

因为好几个地方都用到print_message,每次复制粘贴比较麻烦,就把它作成一个小的模块

  1. #Print.pm
  2. package Print;

  3. require     Exporter;

  4. our @ISA            = qw(Exporter);
  5. our @EXPORT         = qw(print_message);
  6. our @EXPORT_OK      = qw();
  7. our $VERSION        = 1.00;

  8. sub print_message {
  9.         print STDERR "\n", "-" x 50,
  10.         "\n$_[0]\n", "-" x 50, "\n";
  11. }

  12. 1

  13. #size.plx
  14. #!/usr/bin/perl

  15. use strict;
  16. use warnings;
  17. use Devel::Size qw/size/;
  18. use Print;

  19. my $n;

  20. print_message("Before I do anything");
  21. print "Size is ", size(\$n);

  22. print_message("After I do something");
  23. $n = '1';
  24. print "Size is ", size(\$n);

  25. print_message("After I do anything");
  26. my $m = $n + 1;
  27. print "Size is ", size(\$n);

复制代码
输出变成这样了:
--------------------------------------------------
Before I do anything
--------------------------------------------------

--------------------------------------------------
After I do something
--------------------------------------------------

--------------------------------------------------
After I do anything
--------------------------------------------------
Size is 24Size is 56Size is 64

我的解决方法有两个:
1. 在size.plx 文件开始设置 local $| = 1;
2. 在
  1. print "Size is ", size(\$n);
复制代码
后面添加换行符
  1. print "Size is ", size(\$n), "\n";
复制代码
但对第二个文件的错误输出还是不太理解,请那位大侠解释下,谢谢了

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2010-11-14 23:01 |只看该作者
回复 1# vinian

你把print_message写到模组时
变成 print STDERR ....
STDERR跟 STDOUT是不一样的

论坛徽章:
0
3 [报告]
发表于 2010-11-14 23:24 |只看该作者
回复  vinian

你把print_message写到模组时
变成 print STDERR ....
STDERR跟 STDOUT是不一样的
jason680 发表于 2010-11-14 23:01


谢了,一直就只盯着输出,倒把这给忘检查了...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP