#!/usr/bin/perl -s use strict; our($dn8_2, $dx8_1, $sufixo_p, $tab, $the,$par); $dn8_2 //= 0; $dx8_1 //= 1; $sufixo_p //= 1; $the //= 1; $par //=0; my $A=qr{[a-zA-Z_]}; my $N=qr{[0-9]}; my $X=qr{[1-9]}; my $P=qr{[0-9]}; my $f1=qr{\s*$}; my $f2=qr{\b}; my $f3=qr{[ \t\-:]|$}; my %parity=(); my $termo; while(<>){ #if($termo =~ m/^($A)($A)$f2/){ add("NT", $1) } #if($termo =~ m/^($A$A)($N$N)$f2/){ add("NT", $1) } if(/(.*)\s/){ $termo=$1; if ($par and $termo =~ /(.*)[-.\/:](.*)/){$parity{$1}=$termo } } else {$termo=""; } print; if ($dn8_2){ if($termo =~ m/^($N{6})($N{2})$f2/){ add($termo,"BT","${1}");next } if($termo =~ m/^($N{4})($N{2})$f2/){ add($termo,"BT","${1}");next } if($termo =~ m/^($N{2})($N{2})$f2/){ add($termo,"BT","${1}");next } } if ($dx8_1){ if($termo =~ m/^($N{1})$X(0{6})$f2/){ add($termo,"BT","${1}0$2");next } if($termo =~ m/^($N{2})$X(0{5})$f2/){ add($termo,"BT","${1}0$2");next } if($termo =~ m/^($N{3})$X(0{4})$f2/){ add($termo,"BT","${1}0$2");next } if($termo =~ m/^($N{4})$X(0{3})$f2/){ add($termo,"BT","${1}0$2");next } if($termo =~ m/^($N{5})$X(0{2})$f2/){ add($termo,"BT","${1}0$2");next } if($termo =~ m/^($N{6})$X(0{1})$f2/){ add($termo,"BT","${1}0$2");next } if($termo =~ m/^($N{7})$X$f2/) { add($termo,"BT","${1}0" );next } } if ($sufixo_p){ if($termo =~ m!^(\S+)[:._/](\S+)$f2!){ add($termo,"BT",$1);next;} } } sub add{my ($a,$b,$c)=@_; if($the){ print "$b ",($parity{$c} || $c),"\n" } } __END__ -par has a parity digit -sufixo_p animal:gato --> animal:gato BT animal -dn8_2 12320000 --> 12320000 BT 123200 123200 --> 123200 BT 1232 123321 --> 123321 BT 1233 3200 --> 3200 BT 32 -dx8_1 12345678 --> 12345678 BT 12345670 12320000 --> 12320000 BT 12300000 -the -tab ????