#!/usr/bin/perl

use 5.034;
no strict 'subs';

if ($#ARGV<2) {
    say "prestam <interés tanto por uno> <número de perídos> <capital>\n";
    say "El interÃ©s serÃ¡ referido al perÃ­odo de liquidaciÃ³n, por ejemplo mensual.";
    say "El nÃºmero de perÃ­odos serÃ¡ el nÃºmero de meses.";
    say "El capital es el importe prestado, neto de gastos.";
    exit -3;    
}

my $string = join (" ", @ARGV);
sane ( $string );

my $i = eval($ARGV[0]);
my $n = eval($ARGV[1]);
my $CC = eval($ARGV[2]);
my ($t, $I, $A, $AA) = (0, 0, 0, 0);
$~ = FORMAT_TOP;
write;
$~ = FORMAT_LINE;
write;
my $c = $CC * $i / (1- (1+$i)**(-$n));
$~ = FORMAT_LINE;
for (1..$n){
    $t++;
    $I = $CC*$i;
    $A = $c-$I;
    $AA += $A;
    $CC -= $A;
    write;
}

exit 3;

format FORMAT_TOP=
Préstamo de @##########.## durante @##### perídos al interés @#####.##%
               $CC,              $n,                        $i*100

Período   Cuota   Intereses Amortización  Amortzación Acum.  Capital Pendiente
------------------------------------------------------------------------------
.
format FORMAT_LINE=
@>>> @#######.## @#######.## @#######.##  @#############.##  @#############.##
$t,     $c,          $I,         $A,            $AA,              $CC
.

sub sane {
    my $s = shift;
    my $f = 0;
    $f++ while ($s =~ /[\d|\.|\+|\-|\*|\/|\s]/g );
    if ($f < length($string)){
	say "Unsecure string found";
	exit -4;
    }
    return $s;
}
    
__END__
