perl自學筆記整理

來源:互聯網
上載者:User

標籤:上下文   分行符號   鍵盤   

輸入與輸出

1、讀取標準輸入(鍵盤輸入的形式都稱標準輸入)
$line = ;                #讀取下一行
chomp($line);                    #截掉最後的分行符號

chomp($line = );    #習慣用法,效果同上
如果讀到檔案結尾(end-of-file), "行輸入"操作符就會返回undef。這樣的設計是為了配合迴圈使用,可以自然地跳出迴圈:
while (defined($line = )) {
    print "I saw $line"; 
}
while () {
    print "I saw $_"; 
}
foreach () {
    print "I saw $_"; 
}
注意: 在while迴圈和foreach的迴圈時是不同的,while迴圈時,perl會讀取一行輸入,把它存入變數並且執行迴圈的主體。接下來,它會回頭去尋找其他的輸入行。但是在foreach迴圈裡,“行輸入”操作符會在列表上下文中執行(因為foreach需要逐項處理列表的內容)。為此,在迴圈能夠開始執行之前,它必須先將輸入全部讀進來。假如輸入來自4000M大小的WEB伺服器記錄檔,他們的差異會十分明顯!因此最好的做法,通常是盡量使用while迴圈的簡寫,讓它每次處理一行。

2、鑽石操作符輸入
perl中有一種讀取輸入的方法,就是使用 鑽石操作符<>。
例如:
[[email protected] aaa]# cat aaa.txt 
aaa
bbb
ccc
[[email protected] aaa]# cat test2.pl 
#!/usr/bin/perl
#test2
while (<>) {
chomp;            #不加參數時,chomp會直接作用在$_上。節約按鍵,從小地方做起。
print "I was $_ that I saw!\n";
}
[[email protected] aaa]# ./test2.pl aaa.txt 
I was aaa that I saw!
I was bbb that I saw!
I was ccc that I saw!

注意:假如鑽石操作符無法開啟某個檔案並讀入內容,便會顯示相關的出錯診斷資訊,就像:
不能開啟wilma:無此檔案或目錄(can‘t open wimal: No such file or directory)
然後鑽石操作符會自動跳到下一個檔案,就像cat或其他標準工具程式的做法一樣。

3、鑽石操作符調用參數

鑽石操作符其實不回去檢查調用參數,它的參數其實是來自@ARGV數組,這個數組是perl實現內建起來的特殊數組。
鑽石操作符會查看數組@ARGV以決定該用哪些檔案名稱,如果它找到的是空列表,就會該用標準輸入資料流;否則,就會使用@ARGV裡的檔案清單。
例如:
[[email protected] aaa]#  cat 1.txt 
nihao
beijing
[[email protected] aaa]# cat 2.txt 
nihao
shanghai
[[email protected] aaa]# cat 3.txt 
nihao
guangzhou
[[email protected] aaa]# cat test2.pl 
#!/usr/bin/perl
#test2
@ARGV = qw# 1.txt 2.txt 3.txt #;            #強制讓鑽石操作符讀這三個檔案。
while (<>) {
chomp;
print "I was $_ that I saw!\n";
}
[[email protected] aaa]# perl test2.pl 
I was nihao that I saw!
I was beijing that I saw!
I was nihao that I saw!
I was shanghai that I saw!
I was nihao that I saw!
I was guangzhou that I saw!

4、標準輸出
print <>;             #和Unix下的cat類似
print sort <>;        #和Unix下的sort命令功能差不多。
print (2+3);        #它會列印5。

5、使用 printf格式化列印輸出

[[email protected] ~]# cat test.pl 
#!/usr/bin/perl
#test
$user = zhangsan;
$days_to_die = 30;
printf "Hello, %s; your password expires in %d days!\n", $user, $days_to_die;        #%s 指定字串格式, %d指數字格式
[[email protected] ~]# perl test.pl
Hello, zhangsan; your password expires in 30 days!

[[email protected] ~]# cat test.pl
#!/usr/bin/perl
#test
$user = zhangsan;
$days_to_die = 30;
printf "Hello, %s; your password expires in %d days!\n", $user, $days_to_die;
printf "%g %g %g\n", 5/2, 51/17, 51 ** 17;
printf "in %d days!\n", 17.85;
printf "%6d\n", 42;
printf "%2d\n", 2e3 + 1.95;
printf "%10s\n", "wilma";
printf "%-10s\n", "wilma";
printf "%12f\n", 6 * 7 + 2/3;
printf "%12.3f\n", 6 * 7 + 2/3;
printf "%12.0f\n", 6 * 7 + 2/3;
printf "Monthly interest rate: %.2f%%\n", 5.25/12;
[[email protected] ~]# perl test.pl
Hello, zhangsan; your password expires in 30 days!
2.5 3 1.0683e+29
in 17 days!
    42
2001
     wilma
wilma     
   42.666667
      42.667
          43
Monthly interest rate: 0.44%

6、檔案控制代碼
有六種特殊檔案控制代碼是Perl保留的,它們的名字是STDIN、STDOUT、STDERR、DATA、ARGV和ARGVOUT。雖然你可以選擇任何喜歡的檔案控制代碼名,但不應使用保留的名字,除非確實需要以特殊方式使用上述六個控制代碼。

7、開啟檔案控制代碼
open CONFIG, " open BEDROCK, ">fred";
open LOG, ">>logfile";

my $selected_output = "my_output";
open LOG, "> $selected_output";
在相對新的Perl(5.6版之後)中,open另有一種使用三個參數的寫法:
open CONFIG, "<", "dino";
open BEDROCK, ">", $file_name;
open LOG, ">>", &logfile_name();

8、關閉檔案控制代碼
close LOG;
close CONFIG;
close BEDROCK;

9、使用檔案控制代碼
print LOG "北京歡迎你!\n";
printf STDERR "%s.\n", aasdf;

10、改變預設的檔案輸出控制代碼
select BEDROCK;
print "I hope Mr. Slate doesn‘t find out about this.\n";
print "Wilma!n";
預設情況下,假如你不為print(printf)指定檔案控制代碼, 它的輸出就會送到STDOUT。不過你可以使用select操作符來改變預設的檔案控制代碼。
$I=1,如果你想改回原先的STDOUT,可以用它
本文來源:http://www.benet.wang/perl%E7%BC%96%E7%A8%8B/89.html";

本文出自 “江湖笑笑生” 部落格,請務必保留此出處http://xuexuhui.blog.51cto.com/9647696/1663767

perl自學筆記整理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.