PV計算機 by perl
PVとトラフィックの計算で欲しくなった。
[calcpv]
#!/usr/bin/perl use strict; use warnings; #use bigint; use Data::Table; =pod PV calculator $ calcpv 4500pv/min 100 =cut my @UNIT_LIST = qw/sec min hour day week month year/; my $REGEX = join '|', @UNIT_LIST; my $input = shift; unless ($input) { _usage(); exit; } my $size = shift || 0; my ($pv, $unit, $value); if ( $input =~ m!(\d+).+/($REGEX)! ) { ($pv, $unit) = ($1, $2); } else { _usage(); exit; } my $data; for my $u (@UNIT_LIST) { if ($u eq $unit) { $value = $pv; } else { my $func = \&{$unit."2$u"}; $value = $func->($pv); } my $traffic = $value * $size; push @{$data}, [$u, _opti($value), _opti($traffic)]; } my $t = Data::Table->new( $data, ['unit', 'pv', 'traffic(KB)'], 0, ); print $t->tsv; sub _opti { my $num = shift; my ($value) = ( $num =~ m!^(\d+\.?\d?\d?)! ); while($value =~ s/(.*\d)(\d\d\d)/$1,$2/){}; return $value; } sub _usage { print "Usage: $0 NUMBERpv/[$REGEX] size(KB)\n"; print "ex: $0 4500pv/min 80\n"; } sub sec2min { return $_[0] * 60; } sub sec2hour { return $_[0] * 60 * 60; } sub sec2day { return $_[0] * 60 * 60 * 24; } sub sec2week { return $_[0] * 60 * 60 * 24 * 7; } sub sec2month { return $_[0] * 60 * 60 * 24 * 7 * 30; } sub sec2year { return $_[0] * 60 * 60 * 24 * 7 * 365; } sub min2sec { return $_[0] / 60; } sub min2hour { return $_[0] * 60; } sub min2day { return $_[0] * 60 * 24; } sub min2week { return $_[0] * 60 * 24 * 7; } sub min2month { return $_[0] * 60 * 24 * 30; } sub min2year { return $_[0] * 60 * 24 * 365; } sub hour2sec { return $_[0] / 60 / 60; } sub hour2min { return $_[0] / 60; } sub hour2day { return $_[0] * 24; } sub hour2week { return $_[0] * 24 * 7; } sub hour2month { return $_[0] * 24 * 30; } sub hour2year { return $_[0] * 24 * 365; } sub day2sec { return $_[0] / 24 / 60 / 60; } sub day2min { return $_[0] / 24 / 60; } sub day2hour { return $_[0] / 24; } sub day2week { return $_[0] * 7; } sub day2month { return $_[0] * 30; } sub day2year { return $_[0] * 365; } sub week2sec { return $_[0] / 7 / 24 / 60 / 60; } sub week2min { return $_[0] / 7 / 24 / 60; } sub week2hour { return $_[0] / 7 / 24; } sub week2day { return $_[0] / 7; } sub week2month { return day2month( week2day($_[0]) ); } sub week2year { return day2year( week2day($_[0]) ); } sub month2sec { return $_[0] / 30 / 24 / 60 / 60; } sub month2min { return $_[0] / 30 / 24 / 60; } sub month2hour { return $_[0] / 30 / 24; } sub month2day { return $_[0] / 30; } sub month2week { return day2week( month2day($_[0]) ); } sub month2year { return $_[0] * 12; } sub year2sec { return $_[0] / 365 / 24 / 60 / 60; } sub year2min { return $_[0] / 365 / 24 / 60; } sub year2hour { return $_[0] / 365 / 24; } sub year2day { return $_[0] / 365; } sub year2week { return day2week( year2day($_[0]) ); } sub year2month { return $_[0] / 12; }
* 未全テスト。