﻿#高速化のために、まず釈文を行単位に読み込む時に、それを全て一つの文字列変数（例えば$string)に格納し、それから「my @character = split(//.$string)」で字単位に分解した上で、foreachループで既出文字の照合を一括して行うべし。さらに句読点削除には、スペースなども一括して「\s」で削除すべし

#基礎設定
use strict;
use warnings;
use utf8;

use Encode qw/encode decode/;

#入力と出力ファイルを開く
my $file1 = 'in.txt';
open my $fh1, '<', $file1
  or die "Can't open $file1:$!";
my $file2 = 'Mojiichiran.txt';
open my $fh2, ">>", $file2
  or die "Can't open $file2:$!";

#基礎変数を定義
my $line1 = "";
my $position ="";
my $moji = "";
my $ichiran = "";
    
#入力ファイル（Liya-shakumon.txt）を行単位に読み込む
while ($line1 = <$fh1>) {
  $line1 =decode('utf8', $line1);
  $line1 =~ s/\?//;
  $line1 =~ s/\r//;
  $line1 =~ s/\n//;
  #句読点を削除する
  while ($line1 =~ s/[（）。，、：；－〼□？\d\+\-abc\(\)]//) {
      }
  #本文と既抽出文字との逐次照合
  foreach $position (0..length($line1)) {
  	  $moji = substr($line1, $position, 1);
  	  unless ($ichiran =~ /$moji/){
  	  	  $ichiran .= $moji."\n";
  	  }
  }
}
print $fh2 encode('utf8', $ichiran);
close $fh1;
close $fh2;
