標準輸入輸出#
# 標準輸入輸出
# (1) STDIN, STDOUT, STDERR
print "Enter your name:";
$input = <STDIN>; # 從 STDIN 讀入
print STDOUT "Hello, $input"; # 輸出至 STDOUT
# 註:print 預設輸出至 STDOUT
# 把 STDIN 內容全部讀入 @all_lines,每一行為一個元素
@all_lines = <STDIN>;
# 輸出至 STDERR
print STDERR "This is an error!";
# (2) 鑽石算符
# 從參數指定之檔案讀入資料,
# 若未指定檔案,則從標準輸入讀入資料
while(<>){
print; # 等同於 print STDOUT $_;
}
# 註:此 Perl script 相當於 cat
# (3) printf 格式化輸出
$name = "Joe";
# Hello, Joe.
printf "Hello, %10s.\n",$name;
# Hello, Joe .
printf "Hello, %-10s.\n",$name;
# 註:輸出格式請參考 perlfunc(1)
檔案輸入輸出#
# 檔案輸入輸出
# (1) 檔案代碼 (filehandle)
# 開啟檔案,預設為讀入模式
open INFILE, "input1.txt";
# 從 INFILE 讀入一行
$line1 = <INFILE>;
# 從 INFILE 讀入下一行
$line2 = <INFILE>;
# 關閉檔案
close INFILE;
# 以覆寫模式開啟檔案輸出
open OUTFILE, ">output3.txt";
# 把 $line1 寫入 OUTFILE
print OUTFILE $line1;
# 把 $line2 寫入 OUTFILE
print OUTFILE $line2;
# 關閉檔案
close OUTFILE;
open INFILE2, "<input2.txt"; # 以讀入模式開啟檔案
# 把 INFILE2 檔案內容全部讀入 @all_line
@all_line = <INFILE2>;
close INFILE2; # 關閉檔案
# 以附加模式開啟檔案輸出
open OUTFILE2, ">>output4.txt";
# 把第一行附加至 OUTFILE2 之後
print OUTFILE2 $all_line[0];
close OUTFILE2; # 關閉檔案
# 開啟檔案,預設為讀入模式
open INFILE, "input1.txt";
while(<INFILE>){
print; # 將檔案讀入內容印出,相當於 cat
}
close INFILE;
# (2) 使用 pipe
open IN,"ls|"; # 把 ls 的輸出當作輸入
@file = <IN>;
close IN;
open OUT,"|sort -r"; # 把輸出導入 sort
for(@file){
chomp;
print OUT "<$_>\n";
}
close OUT;
# (3) DATA 檔案代碼
# 放在 perl script 檔內結尾處的資料,以 "__END__" 開始,
# 使用方式即直接使用 <DATA> 檔案代碼。
while(<DATA>){
%hash = (%hash,split);
}
print "$_ is $hash{$_}\n" for keys %hash;
__END__
Bill boy
Mary girl
Joe boy