你真的懂perl里面的print, print STDOUT, print STDERR么?

Posted 集成电路设计及EDA教程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你真的懂perl里面的print, print STDOUT, print STDERR么?相关的知识,希望对你有一定的参考价值。

你真的懂perl里面的print, print STDOUT, print STDERR么?

当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放 你真的懂perl里面的print, print STDOUT, print STDERR么? 你真的懂perl里面的print, print STDOUT, print STDERR么?

程序员笑话一则》

老板:小程,下班前新版本一定要上线!

小程:好的。

第二天,老板上班,问小程:新版本怎么还没上线?

小程:我还没下班呢。


《你真的懂perl里面的print, print STDOUT, print STDERR么?》

建议横屏观看。

先讲下前因后果。

--------------------------------------------------------------------------------------

####################    遇到问题    ####################

1、在当时设计用Perl发送邮件的时候,等待的过程本想让脚本print “.”的,根据点的个数可以看程序到底有没有执行,执行了多长时间,ICV检查DRC也有这样一个显示。可是怎么设计都不行,无论等多久,屏幕上就是没有“.......................”,后来只能用print "wait "来代替了。该脚本见推文:


后来才发现,原来print有一个“行缓冲”问题。不应该用print “.”,而应该用print STDERR "."的。最终实现效果:

你真的懂perl里面的print, print STDOUT, print STDERR么?

--------------------------------------------------------------------------------------

####################    举个栗子    ####################

先举个栗子:

#!/usr/bin/perl

use strict;

use Term::ANSIColor;

print "Hello World! ";

print "Hi, nice to meet you!";

print STDERR color 'red';

print STDERR "ERROR: ";

print STDERR color 'reset';

print STDERR "can't find files. "

#注:print color 是perl里面打印含颜色字体的方式,不懂的可以百度下撒。

你猜执行结果是什么?

你真的懂perl里面的print, print STDOUT, print STDERR么?


是这样么?不对,正确的结果是:

你真的懂perl里面的print, print STDOUT, print STDERR么?


--------------------------------------------------------------------------------------

####################        结论        ####################

根据该结果说下print、print STDOUT、print STDERR的区别

print:

和print STDOUT一样。

perl中的print函数是行缓冲。当碰到 ,print就立即把“标准输出”打印出来。

因此打印内容的第一行是:Hello World!

而后面的“Hi, nice to meet you!”因为没有碰到换行,所以先存在缓冲区,等到缓冲区满了再打印。

print STDERR:

print STDERR错误输出是没有缓冲的一旦遇到就立即打印出来。

因此我们看到第二行打印的内容是“ERROR: can't find files.”因为在print关键字“ERROR”的时候设置了color,所以它含有颜色而“can't find files.”不含颜色。

--------------------------------------------------------------------------------------

##############        问题结束了?这么简单?        ###########

你可能会想,哦,就这么简单呀,我早就知道了。

你真的懂perl里面的print, print STDOUT, print STDERR么?

哈哈,问题没有这么简单,鉴于问题比较多,后边再接着讲,见下篇推文:

《EDA工具执行的某些结果没有print到log里面?吐出的log有些神秘诡异的代码,如何去除?》


相关历史推文:









你真的懂perl里面的print, print STDOUT, print STDERR么?公告你真的懂perl里面的print, print STDOUT, print STDERR么?

网易云课堂课程

链接:https://study.163.com/course/introduction/1005909004.htm

《Calibredrv教程-提高流程自动化》

你真的懂perl里面的print, print STDOUT, print STDERR么?

《搭建IC设计的EDA虚拟机/服务器》

以上是关于你真的懂perl里面的print, print STDOUT, print STDERR么?的主要内容,如果未能解决你的问题,请参考以下文章

Perl搜索并用xargs-0替换一行

ACM算法 | 你真的搞懂贪心算法了吗?

疯狂的Perl代码

perl 中的隐式转换

为啥在 Perl 中 'print (52-80)*42' 与 'print 42*(52-80)' 不同?

Perl 的等价于 PHP 的 print_r() 是啥?