コマンドラインでストップウォッチ

30分プログラム、その672。コマンドラインで動作するストップウォッチを作ってみた。
perl stopwatch.plで起動すると、経過時間を延々と表示してくれます。
操作方法は、Enterを押せばラップタイム、C-cで終了、C-zで一時停止、ということにしといてください。まあ、ウソではないです。

使い方

$ perl stopwatch.pl
0:01:16.711

ソースコード

#! /usr/bin/perl
# -*- mode:perl; coding:utf-8 -*-
#
# stopwatch.pl -
#
# Copyright(C) 2009 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2009/10/05 20:43:04
#
# This program is free software; you can redistribute it and/or
# modify it under MIT Lincence.
#

use Time::HiRes qw(gettimeofday tv_interval);
use strict;
use warnings;
use Data::Dumper;

sub div_mod($$){
    my ($x, $y) = @_;
    my $div;
    {
	use integer;
	$div = $x / $y;
    }
    ($div, $x - $div*$y);
}

sub split_time($){
    my ($t) = @_;
    my ($hour,$s)   = div_mod($t, 3600);
    my ($min, $sec) = div_mod($s, 60);
    ($hour,$min,$sec);
}

my $from = [gettimeofday()];
while (1) {
    my $t = tv_interval($from);
    printf "%d:%02d:%02.03f\r",split_time($t);
    sleep 0.5;
}