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 <>;
相關文章
相關標籤/搜索