2020年7月24日金曜日

開発環境

続・初めてのPerl 改訂第2版 (Randal L. Schwartz(著)brian d foy(著)Tom Phoenix(著)伊藤 直也(監修)長尾 高弘(翻訳)、オライリージャパン)の8章(ファイルハンドルへのリファレンス)、8.7(練習問題)2の解答を求めてみる。

コード

#!/usr/bin/perl
use strict;
use warnings;

my $filename = "temp.log";
open my $in_fh, '<', $filename or die "Can't open '$filename': $!";
my %names = ();
my $dirname = "info";
mkdir $dirname or die "Can't mkdir '$dirname': $!";
chdir $dirname or die "Can't chdir '$dirname': $!";
while (<$in_fh>) {
    /^([^:]+)/;
    my $name = lc $1;
    unless ($names{$name}) {
        open my $out_fh, '>', "$name.info" or die "Can't open $name.info: $!";
        $names{$name} = $out_fh
    }
    print {$names{$name}} $_;
}

入出力結果(Zsh、PowerShell、Terminal)

% cat info/ginger.info 
Ginger: 1 crab
Ginger: 2 papayas
Ginger: 3 crabs
Ginger: 4 coconuts
Ginger: 3 flowers
Ginger: 5 bananas
Ginger: 4 crabs
Ginger: 2 papayas
Ginger: 2 crabs
Ginger: 3 crabs
Ginger: 4 flowers
Ginger: 2 coconuts
Ginger: 5 coconuts
Ginger: 5 flowers
% cat info/gilligan.info 
Gilligan: 1 papaya
Gilligan: 4 papayas
Gilligan: 1 flower
Gilligan: 3 crabs
Gilligan: 3 papayas
%

0 コメント:

コメントを投稿