Perl的输出:print、say和printf、sprintf

print、printf和say均可以输出信息。print和say相似,print不自带换行符,say自带换行符,但要使用say,必须写use语句use 5.010;,printf像C语言的printf同样,能够定制输出格式,不过我这perl彷佛不支持printf,一用就报错,不知道为何。它们有返回值:若是输出成功,就返回1。函数

注意perl中有上下文的概念,这几个输出操做也一样有上下文环境:列表上下文。code

@arr=qw(hello world);
print "hello world","\n"; 
print "hello world\n";  
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中又有上下文的概念,在不一样上下文执行同一个操做的结果是不同的。在这里:perl

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

因此,上面的语句等价于:技巧

(print(3+4))*4

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

若是将上面赋值给一个变量:语言

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

$num的值将为4。文件

若是想要输出(3+4)*4=28的结果,能够将它们放在一个括号里,或者在(3+4)的括号前加一个+号,它表示让它后面的表达式做为函数的参数,至关于加个括号。因此,下面两个是等价的语句:co

print ((3+4)*4);
print +(3+4)*4;

另外,因为print/say不使用括号的时候,它们会输出其后面的列表。因此有如下技巧:

  • 像cat命令同样,直接输出文件内容:print <>;
  • 像sort命令同样,排序文件内容:print sort <>;
相关文章
相关标签/搜索