App-timeput
view release on metacpan or search on metacpan
#!/usr/bin/perl
use 5.008 ; use strict ; use warnings ;
use Getopt::Std ;
use Getopt::Long qw [ GetOptions :config bundling no_ignore_case pass_through ] ; # GetOptionsFromArray ] ;
use Time::HiRes qw[ gettimeofday tv_interval sleep ] ; # Perl 5.7.3ããã³ã¢ã¢ã¸ã¥ã¼ã«
use Term::ANSIColor qw[ color :constants ] ; $Term::ANSIColor::AUTORESET = 1 ;
use FindBin qw[ $Script ] ;
sub FB ($){FAINT BOLD $_[0]}
sub Y ($){YELLOW $_[0]}
GetOptions 'sleep=f' => \my$sleep ;
getopts ".:b:c:dgsz:" , \my %o ;
my ($t0s,$t0p) = gettimeofday ; # ãèµ·åããæå»ãã®è¨é²ã15ãã¤ã¯ãç§ã®ãªã¼ãã¼ããã
$ENV{TZ} //= $o{z} ; # ã¿ã¤ã ã¾ã¼ã³
## Ctrl+Z æ¼ä¸ã«å¯¾ããåå¿ ã®æå®
sub cZ { say STDERR CYAN "$. line(s) output so far. ($Script $$)" ; $SIG{TSTP} ='DEFAULT' ; kill 'TSTP', $$ } ;
$SIG{TSTP} = sub { cZ } ;
$SIG{CONT} = sub { $SIG{TSTP} = sub { cZ } } ;
$| = 0 eq ($o{b}//'') ? 0 : 1 ; # -b 0 ã®è¨å®ã§ããããã¡ãªã³ã°ãããªãã($| != 0 ãªããã ã¡ã«åºåã)
## --sleep ç§æ°(ãã¤ã¯ãç§åä½) ã§ã®åã
do { & proc_sleep ; exit } if defined $sleep ;
sub proc_sleep () {
while ( <> ) {
do { my $s = $sleep * $. - tv_interval( [$t0s,$t0p] , [gettimeofday] ) ; sleep $s > 0 ? $s : 0 } ;
print $_ ; # print 㯠2 ã 5 ããªç§åä½ã«æéããããã
}
}
#$o{'.'} //= 3 ; # ç§æ°ã®å°æ°ç¹ä»¥ä¸æ¡æ°ã®è¨å®
my $dig = $o{'.'} // 0 ; # æ¡æ° (表示ããç§ã®å°æ°ç¹ä»¥ä¸ã®æ¡æ°)
my $lay = 1e6 / 10 ** $dig if defined $dig ; # lay ã¯è±èªã®ãç½®ããã®ã¤ããã100䏿ªæºã®ãã¤ã¯ãç§ã«å¯¾ãã¦ãå²ãæ°ã
* gapproc = $o{g} ? sub (){ ($t0s, $t0p) = gettimeofday } : sub (){} ; # 50ããç§ã®ãªã¼ãã¼ãããã1åã®å®è¡ã«ã¤ãã
my $HMS0 = '%02d:%02d:%02d' ; #ãä½åº¦ã使ãããæ¸å¼
my $HMSd = "$HMS0.%0${dig}d" ; #ãä½åº¦ã使ãããæ¸å¼
my $dHMS0 = "%02d-%02d-%02d $HMS0" ;
my $dHMSd = "%02d-%02d-%02d $HMSd" ;
do { & main ; exit } ;
sub hms0 () { sprintf $HMS0 , @{[localtime]}[2,1,0] }
sub hmsD () { my($s,$m)=gettimeofday ; sprintf $HMSd, @{[localtime $s]}[2,1,0], int $m/$lay }
sub Dhms0 () { my @f=localtime;$f[4]+=1;$f[5]+=1900 ; sprintf $dHMS0 , @f[5,4,3,2,1,0] }
sub DhmsD () { my($s,$m)=gettimeofday ; my @f=localtime $s;$f[4]+=1;$f[5]+=1900 ; sprintf $dHMSd , @f[5,4,3,2,1,0],int $m/$lay }
sub secondsSince0 () { return sprintf "%0.0f" , time - $t0s }
sub secondsSinceD () { return sprintf "%0.${dig}f" , tv_interval [ $t0s, $t0p ] } ;
sub timenow () ;
sub main () {
* timenow = $o{d} ? $dig ? * DhmsD : *Dhms0 : $dig ? * hmsD : * hms0 ;
* timenow = $o{'.'} ? * secondsSinceD : * secondsSince0 if $o{s} || $o{g} ;
my $C = defined $o{c} ? $o{c} eq 0 ? '' : color $o{c} : color 'faint bold' ; # çºè²ããã
my $R = defined $o{c} ? $o{c} eq 0 ? '' : color 'reset' : color 'reset' ; # çºè²ããå ´åã¯ãè²ããªã»ããããã
while (<>) { my $t = timenow ; print "$C$t$R\t$_" ; & gapproc } ;
}
## ãã«ãã®æ±ã
sub VERSION_MESSAGE {}
sub HELP_MESSAGE{
use FindBin qw[ $Script ] ;
$ARGV[1] //= '' ;
open my $FH , '<' , $0 ;
while(<$FH>){
s/\$0/$Script/g ;
print $_ if $ARGV[1] eq 'opt' ? m/^\ +\-/ : s/^=head1// .. s/^=cut// ;
( run in 3.313 seconds using v1.01-cache-2.11-cpan-9169edd2b0e )