Num2LTWord Perlu
Kai kam prireikė funkcijos, kuri
verstų skaičius į lietuvių kalbą. Tad parašiau Perlinį moduliuką –
gal bus dar kam nors naudingas. (Parsiųsti kaip normalų modulį galima iš
čia)
#!/usr/bin/perl -w
package Num2LTWord;
=head1 Num2LTWord -- skaičiai lietuviškai
Modulis verčiantis (sveikus) skaičius į lietuvių kalbą
=head2 NAUDOJIMAS
use Num2LTWord;
num2ltword(2003);
=head2 FUNKCIJOS
=head3 num2ltword ( skaičius )
Ši funkcija grąžina suformuotą lietuvišką skaičiaus pavadinimą.
=head2 RIKTAI IR APRIBOJIMAI
Funkcija C<num2ltword> supranta tik sveikus skaičius intervale
(- 1 000 000 000; 1 000 000 000)
=head2 AUTORIUS
Petras Kudaras aka moxliukas ([email protected])
=cut
use strict;
use warnings;
use Exporter;
our @ISA = qw/Exporter/;
our @EXPORT = qw/num2ltword/;
our $VERSION = 0.02;
sub num2ltword {
my $ka = shift;
my $result = '';
return "Nežinau kaip čia paverst" unless $ka eq int($ka);
return "nulis" if $ka == 0;
my $kam = abs $ka;
$result .= "minus " if $ka < 0;
if($kam >= 1_000_000_000) {
return "Per didelis man čia skaičius";
} else {
$result .= __iki1e9($kam);
$result =~ s/\s+$//;
$result =~ s/\s+/ /g;
return $result;
}
}
sub __iki10 {
my $ka = shift;
my @skaitmenys = ("", "vienas", "du",
"trys", "keturi", "penki",
"šeši", "septyni", "aštuoni",
"devyni", "dešimt");
return $skaitmenys[$ka];
}
sub __iki20 {
my $ka = shift;
my @lika = ("vienuolika", "dvylika", "trylika",
"keturiolika", "penkiolika", "šešiolika",
"septyniolika", "aštuoniolika", "devyniolika");
if ($ka <= 10) {
return __iki10($ka);
} else {
return $lika[$ka % 10 - 1];
}
}
sub __iki100 {
my $ka = shift;
my @desimt = ("", "", "dvi", "tris", "keturias", "penkias",
"šešias", "septynias", "aštuonias", "devynias");
if ($ka < 20) {
return __iki20($ka);
} else {
if($ka % 10 == 0) {
return $desimt[int($ka/10)] . "dešimt";
} else {
return $desimt[int($ka/10)] . "dešimt " . __iki10($ka % 10);
}
}
}
sub __iki1000 {
my $ka = shift;
return __iki100($ka) if ($ka < 100);
if(int($ka / 100) == 1) {
return __iki10(int($ka/100)) . " šimtas " . __iki100($ka % 100);
} else {
return __iki10(int($ka/100)) . " šimtai " . __iki100($ka % 100);
}
}
sub __iki1e6 {
my $ka = shift;
return __iki1000($ka) if ($ka < 1000);
my $t = __iki1000(int($ka/1000));
if ($t =~ /vienas$/) {
return "$t tūkstantis " . __iki1000($ka % 1000);
} elsif ($t =~ /(?:lika|šimtai|imt)\s*$/) {
return "$t tūkstančių " . __iki1000($ka % 1000);
} else {
return "$t tūkstančiai " . __iki1000($ka % 1000);
}
}
sub __iki1e9 {
my $ka = shift;
return __iki1e6($ka) if ($ka < 1_000_000);
my $t = __iki1e6(int($ka/1_000_000));
if ($t =~ /vienas$/) {
return "$t milijonas " . __iki1e6($ka % 1_000_000);
} elsif ($t =~ /(?:šimtai|lika|imt)\s*$/) {
return "$t milijonų " . __iki1e6($ka % 1_000_000);
} else {
return "$t milijonai " . __iki1e6($ka % 1_000_000);
}
}
1;