perl的输出:printsay和printf

Posted f-ck-need-u

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了perl的输出:printsay和printf相关的知识,希望对你有一定的参考价值。

print、printf和say

print、printf和say都可以输出信息。print和say类似,print不自带换行符,say自带换行符,但要使用say,必须写use语句use 5.010;,printf像C语言的printf一样,可以定制输出格式,不过我这perl似乎不支持printf,一用就报错,不知道为什么。它们有返回值:如果输出成功,就返回1。

注意perl中有上下文的概念,这几个输出操作也同样有上下文环境。

@arr=qw(hello world);
print "hello world","
";   # 列表上下文
print "hello world
";      # 标量上下文
print @arr;            # 输出helloworld(没空格)
print "@arr";          # 输出hello world(有空格)
use 5.010;
say "hello world!";  # 自带换行符

这些本没有什么可解释的,但是print/say可以以函数格式(print(args)/say(args))进行输出,这时候有个陷阱需要注意。

print(3+4)*4;

这个反返回7,而不是28。这是怎么计算的?

Perl中很多时候是可以省略括号的,这往往让我们忘记括号的归属。而Perl中又有上下文的概念,在不同上下文执行同一个操作的结果是不一样的。在这里:

  • print不加括号的时候,它需求的参数是一个列表上下文,它后面的所有内容都会被print输出
  • print加括号的时候,它只会输出括号中的内容

所以,上面的语句等价于:

(print(3+4))*4

它先执行print(7),然后拿到print的返回值1,将其乘以4,由于没有赋值给其它变量,所以这个乘法的结果被丢弃。

如果将上面赋值给一个变量:

$num = print(3+4)*4;

$num的值将为4。

另外,由于print/say不使用括号的时候,它们会输出其后面的列表。所以有以下技巧:

  • 像cat命令一样,直接输出文件内容:print <>;
  • 像sort命令一样,排序文件内容:print sort <>;

以上是关于perl的输出:printsay和printf的主要内容,如果未能解决你的问题,请参考以下文章

Linux中perl-DBI和DBI有啥区别?

perl 中 $/ 代表了啥意思?

如何在 Perl 中捕获输出和退出代码时执行外部脚本?

perl 第11弹 运算符大汇总

perl 数组赋值 求解释

perl 将数组的元素对应为hash的key 和value