#!/usr/bin/perl 

use 5.038;

my (@data, $flag);
if (scalar @ARGV > 1){
    @data = @ARGV;
    $flag=1;
}elsif (scalar @ARGV == 1){
    if (-e $ARGV[0] && -T $ARGV[0]){
	open my $fh, '<', $ARGV[0] or die $!;
	my $type = `wc -l`;
	if ($type > 2){
	    @data = <$fh>;
	}else{
	    my $line = <$fh>;
	    @data = split /\s+/, $line;
	}
	close $fh;
    }else{
	die "Inexistent or wrong file type.";
    }
}else{
    @data = split /\s+|\,/, <>;
    $flag = 2;
}

for my $i (@data){
    $i =~ s/\s+//g;
    if (0+$i ne $i){
	die "Not a number: $i";
    }
}

say "Data readed: ", scalar(@data), "\n";

my @sdata = sort { $a <=> $b } @data;
my $min = $sdata[0];
my $max = $sdata[-1];

my $n = scalar ( @sdata );

my $k = 0;
my @percentile = (0) x $n;
my @medias = (0) x $n;
my @pcount = (0) x $n;
for my $i (@sdata){
recicla_bron:
    if ( ($i-$min)/($max-$min) <= $pcount[$k]+0.1 ){
	$percentile[$k]++;
	$medias[$k] += $i;	
    }else{
	last if ($pcount[$k] >= 1);
	$pcount[$k+1] = $pcount[$k]+0.1;    # esto va por abajo p[0]=0
	$k++;
	goto recicla_bron;
    }
}

say "Histogram:";
for my $cc (0..9) {
    print $pcount[$cc], "-", $pcount[$cc]+0.1,":  ", "*" x $percentile[$cc], "\n";
}
say "\nPercentiles counter and mean:";
for my $cc (0..9) {
    print $pcount[$cc], "-", $pcount[$cc]+0.1,":  ", "count = $percentile[$cc]  mean = ";
    my $m = ($percentile[$cc] !=0) ? $medias[$cc]/$percentile[$cc] : 0;
    say "$m";  
}
say "";

exit 2;

__END__
  
Example:
  $ perl -e 'print rand()." " for (1..100); ' | perl percentil 

