P.254
イ)while によるループ処理

open F, "名前.txt"; while (<F>) { chomp $_; push @name, $_; } print "@name";
<実行結果> 青山 小川 白瀬 滄海
ロ)for によるループ処理
open F, "名前.txt"; for (<F>) { chomp $_; push @name, $_; } print "@name";
<実行結果> 青山 小川 白瀬 滄海
ハ)map 関数による処理
open F, "名前.txt"; @name = <F>; map chomp, @name; print "@name";
<実行結果> 青山 小川 白瀬 滄海
イ)< > による単純出力
print <F>;
ロ)while による単純出力
while (<F>) {print}
ハ)for による単純出力
for (<F>) {print}
例:「while による単純出力」
open F, "ビン代.txt"; while (<F>) {print}
<実行結果> ≪ビン代はいくら?≫ この限定物のワインはビン代込みで 8,500 円でございます。 中身はビン代よりも 8,000 円ほどお高いのですが、もしよろしければ、 空きビンはうちで引き取らせていただきます。 「すると、ビンは 500 円で引き取ってくれるというわけだ。」 いいえ、お客様そうではありません。 ビンは 250 円で引き取らせていただきます。
例:「アドレス帳からの検索」
「アドレス帳.txt」 アドレス帳 99/7/15 更新 かすみ 070-2222-3333 # 登録する順番はまちまちです 白瀬藍 090-3535-6565 080-1122-3344 アザミ みどり 090-8888-6666 yuka 友香 070-5555-7777 ゆき 090-4500-8000 yuki 090-555-666 優子
# address.pl print "\n キーワード:"; $kw = <STDIN>; chomp $kw; $kw =~ s( +|+){|}g; print "\n"; open F, "アドレス帳.txt"; for (<F>) { if (/$kw/o) {print " $_"; $d = 1} } print " 該当者なし \n" if $d < 1;
例1:「評定の書き替え」
「評定.txt」
10 段階評定 英語:7 数学:10 国語:6 理科:8 社会:4
open R, "評定.txt"; open W, ">評定-2.txt"; @score = <R>; # 10 だけは一旦 A にしてから変換 map s/10/A/, @score; map tr/1-9A/1122334455/, @score; print W @score; # 書き替えたデータの書き込み
<実行結果> 「評定-2.txt」 5 段階評定 英語:4 数学:5 国語:3 理科:4 社会:2
例2:「インターネット・アドレスの小文字変換」
「世界の都市.txt」 世界の都市の写真 / World Series Athens(ア テ ネ)http://World_Photo/Athens.JPG/ Berlin(ベルリン)http://World_Photo/Berlin.JPG/ Lyon(リ ヨ ン)http://World_Photo/Lyon.JPG/ Paris (パリ)http://World_Photo/Paris.JPG/ Venice(ベ ニ ス)http://World_Photo/Venice.JPG/ 資料提供 World City, Inc.
open R, "世界の都市.txt"; open W, ">世界の都市-2.txt"; @city = <R>; map s/http:(.+)/http:\L\1/, @city; # http: 以降の大文字を全て小文字に変換 print W @city;
<実行結果> 「世界の都市-2.txt」
世界の都市の写真 / World Series Athens(ア テ ネ)http://world_photo/athens.jpg/ Berlin(ベルリン)http://world_photo/berlin.jpg/ Lyon(リ ヨ ン)http://world_photo/lyon.jpg/ Paris (パリ)http://world_photo/paris.jpg/ Venice(ベ ニ ス)http://world_photo/venice.jpg/ 資料提供 World City, Inc.
例1:「アドレス帳の訂正 + ソート」
「アドレス帳2.txt」
アドレス帳2 yuuko 優子 090-555-666 kasumi 霞 070-2222-3333 ai 藍 090-3535-6565 yuki 雪 090-4500-8000 azami 薊 080-1122-3344 midori 翠 090-8888-6666 yuka 友香 070-5555-7777
# change.pl print "\n 訂正する人:"; $change = <STDIN>; chomp $change; print "\n"; open F, "アドレス帳2.txt"; $top[0] = <F>; $top[1] = <F>; @data = <F>; for (@data) { if (/$change/o) { print " $_ \n 訂正文(無訂正は Enter のみ)\n\n "; $a = <STDIN>; # ここで変更します $_ = $a unless $a eq "\n"; } } push @top, sort @data; open F, ">アドレス帳2.txt"; print F @top; print "\n 訂正完了 \n";
「アドレス帳2.txt」
アドレス帳2 ai 藍 090-3535-6565 azami 薊 080-1122-3344 kasumi 霞 070-2222-3333 midori 翠 090-8888-6666 yuka 友香 090-6666-8888 yuki 雪 090-4500-8000 yuuko 優子 090-555-666
例2:「プログラムの行数表示」
open R, "address.pl"; open W, ">address-2.txt"; $i = "00"; for (<R>) {++$i; $_ = "$i 行目:$_"; print W $_}
<実行結果> 「address-2.txt」 01 行目:# address.pl 02 行目: 03 行目:print "\n キーワード:"; 04 行目:$kw = <STDIN>; 05 行目:chomp $kw; 06 行目:$kw =~ s( +|+){|}g; 07 行目:print "\n"; 08 行目: 09 行目:open F, "アドレス帳.txt"; 10 行目:for (<F>) 11 行目: { 12 行目:if (/$kw/o) 13 行目:{print " $_"; $d = 1 } 14 行目: } 15 行目:print " 該当者なし \n" if $d < 1;