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 (moxliukas@delfi.lt) =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;
Nu neblogai cia primalei… :)
pawarai;)