標準輸入輸出

# 標準輸入輸出

# (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

繼續閱讀:Perl 程式設計教學