当前位置:  开发笔记 > 编程语言 > 正文

将stdout传递给Perl时,如何让它打印换行符?

如何解决《将stdout传递给Perl时,如何让它打印换行符?》经验,为你挑选了1个好方法。

我刚刚发现将stdout传输到Perl中,我很惊讶你甚至可以这样做:

[user@folder] $ echo print 1/3 | perl
0.33333[user@folder] $

根据我的理解,你将print命令放入Perl,并使用Perl的代码进行浮点计算.请指正.但是,每次我这样做,我都会得到一个没有换行符的答案.我到处搜索,我只是不能将这些术语的关键字足以创建答案.

这是我正在谈论的内容的链接,在海报旁边 Thor: 我如何在bash中使用浮点除法?

他给出了一个惊人的答案,但我无法评论或给用户发消息,所以我决定在这里创建一个新问题.

我仍然试图围绕这是如何工作,变量.

$ three=3
$ echo $three/3 | perl
1[user@folder] $

奖金问题:
它起初就像我试图让bash在算术运算中输出浮点数.我不明白为什么bc不能返回浮动.据说它可以,但它对我不起作用.

理想的情况是:

$ echo 1/3 | bc
0
$

应该返回.333而不是0.我正在委托一个工具bc,并且bc应该能够做浮动.我只是不明白发生了什么.



1> Jonathan Lef..:

Perl的

使用-l选项(请参阅perldoc perlrun):

$ echo print 1/3 | perl -l
0.333333333333333
$

它会自动添加换行符.文件说:

-l[octnum]

启用自动行结束处理.它有两个独立的效果.首先,$/当与-n或一起使用时,它会自动选择(输入记录分隔符)-p.其次,它指定$\(输出记录分隔符)具有octnum的值,以便任何print语句都将重新添加该分隔符.如果省略octnum,则设置$\为当前值$/.例如,要将线条修剪为80列:

   perl -lpe 'substr($_, 80) = ""'

请注意,分配$\ = $/是在处理交换机时完成的,因此如果-l交换机后跟交换机,则输入记录分隔符可能与输出记录分隔符不同-0:

   gnufind / -print0 | perl -ln0e 'print "found $_" if -p'

这将设置$\为换行符,然后设置$/为空字符.


贝壳

shell扩展了shell变量,所以不应该对此感到惊讶:

$ three=3
$ echo print $three/3 | perl -l
1
$ echo print $three/3
print 3/3
$

公元前

对于你的奖金问题:

$ echo 1/3 | bc -l
.33333333333333333333
$

纯粹的侥幸是-l再次选择.这一次,它意味着'加载库',巧合地设置scale为20,这就是显示20个十进制数字的原因.

顺便说一句,快速获取π到大量小数位的方法是:

$ echo '4*a(1)' | bc -l
3.14159265358979323844
$ echo 'scale=40; 4*a(1)' | bc -l
3.1415926535897932384626433832795028841968
$

功能a,通过从库加载-l选项,是"反正切".我观察到来自Google搜索"pi 40位"的至少3个来源表明它应该是:3.1415926535 8979323846 2643383279 5028841971 - 这表明在第40个数字中存在3个计数的错误bc.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有