Chinaunix

标题: 输出时缓冲区疑惑 [打印本页]

作者: vinian    时间: 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";
复制代码
但对第二个文件的错误输出还是不太理解,请那位大侠解释下,谢谢了
作者: jason680    时间: 2010-11-14 23:01
回复 1# vinian

你把print_message写到模组时
变成 print STDERR ....
STDERR跟 STDOUT是不一样的
作者: vinian    时间: 2010-11-14 23:24
回复  vinian

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


谢了,一直就只盯着输出,倒把这给忘检查了...




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2