#!/usr/bin/env perl use strict; use warnings; use Time::HiRes qw{usleep}; use Time::Piece; my ($countdown, $check) = @ARGV; $countdown = 60 unless defined $countdown; $check ||= 10; # Avoid "Illegal modulus zero" error my $countdown_remaining = Time::Piece->strptime(0 => '%S'); $countdown_remaining += $countdown; my $continue_re = qr{(?:^$|^[Yy])}; print_timestamp('Started'); { local $| = 1; do { print_countdown($countdown_remaining); my $seconds_remaining = $countdown_remaining->epoch; print "\n" and last unless $seconds_remaining; if (($countdown - $seconds_remaining) % $check == 0 && $countdown > $seconds_remaining ) { print_timestamp("\nPaused "); print "Continue? ([Y]/n): "; chomp(my $reply = ); last unless $reply =~ $continue_re; print_timestamp('Resumed'); } usleep 1_000_000; } while $countdown_remaining--; } print_timestamp("Finished"); sub print_countdown { printf "\r%s" => shift->strftime('%H:%M:%S'); } sub print_timestamp { print shift, ' at: ', scalar(localtime), "\n"; }