2つのテキスト内の数字を1行ずつ割り算する

30分プログラム、その604。2つのテキスト内の数字を1行ずつ割り算する via http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_169
わりと単純な問題だとは思うんだけど、出力例がちょっとややこしい。

$ cat a.txt
20
18
0
0

$ cat b.txt
25
20
0
14
0

という2つのファイルから

80
GYO = 1
90
GYO = 2
GYO = 3
0
GYO = 4

という出力を得るのが正解らしいけど、20/25は80じゃないし、GYOというのもよく分からない。

コードを読んでみると、どうも割り算じゃなくてパーセントを出力してて、GYOは行番号を示しているらしい。
えー、GYOはないわー。行番号をカウントしとくのも面倒だし今回は無しでいいや。必要ならcat -nとかにパイプすればいいと思う。

使い方

$ cat a.txt
20
18
0
0

$ cat b.txt
25
20
0
14
0

$ perl div.pl a.txt b.txt
80
90
NaN
0

ソースコード

#! /usr/bin/perl
# -*- mode:perl; coding:utf-8 -*-
#
# div.pl -
#
# Copyright(C) 2009 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2009/06/16 21:18:54
#
# This program is free software; you can redistribute it and/or
# modify it under MIT Lincence.
#

use strict;
use warnings;
use Data::Dumper;
use List::MoreUtils qw(:all);

sub read_from_file($){
    open FILE,$_[0];
    map {int($_)} <FILE>;
}

my @xs = read_from_file $ARGV[0];
my @ys = read_from_file $ARGV[1];

my $it = pairwise {
    if($a == 0 && $b == 0){
	print "NaN\n";
    }else{
	printf "%d\n",$a/$b*100;
    }
} @xs,@ys;