Saturday, August 25, 2007
Perl 펄, 타이머 Timer 만들기 소스, 경과 시간 스톱와치
Perl에서 간단한 타이머 Timer 를 만드는 방법입니다. 스톱와치 또는 삶은 계란이나 컵라면용 같은 주방용 타이머와도 비슷합니다. 아래 소스는, 사용자가 아무 키나 누를 때까지 기다린 후, 아무 키나 누르면 그때까지 지난 시간 즉 경과 시간을 화면에 "시분초" 형식으로 출력합니다.
디버깅을 많이 했지만 버그가 있을 수 있습니다. 이 소스를 응용하여 중요한 프로그램을 만들 때에는 주의가 필요합니다.
타이머 소스 파일명: example.pl
실행 결과 화면:
맨 마지막의 24:00:06 이라는 결과는 컴퓨터의 시계를 하루 앞으로 변경한 후 강제로 얻은 결과입니다.
컵라면 타이머 (온라인 버전):
▶▶ 컵라면 타이머; 인터넷 요리용 타이머, 모래시계 Cooking Timer
스톱워치 (온라인 버전 스톱와치):
▶▶ 스톱워치, 초시계, 온라인 스톱와치, 100분의 1초 Stopwatch
디버깅을 많이 했지만 버그가 있을 수 있습니다. 이 소스를 응용하여 중요한 프로그램을 만들 때에는 주의가 필요합니다.
Timer, 초 단위 hh:mm:ss 로 출력 예제
타이머 소스 파일명: example.pl
#!/usr/bin/perl
use strict; use warnings;
codeTimer("on");
print "타이머 켰습니다. 아무키나 누를 때까지 경과 시간을 측정합니다.\n";
<STDIN>; # 사용자가 아무키나 누를 때까지 대기
# 타이머 끈 후, 경과 시간 출력
print "경과 시간: " . codeTimer("off") . "\n";
#### 이하는 타이머에 필요한 함수들
{ # $old_time 을 static local variable 로 만들어 주기 위한 bare block
my $old_time;
sub codeTimer {
if ($_[0] eq "on") { $old_time = time(); } # 타이머 켜기
if ($_[0] eq "off") { secToHHMMSS(time() - $old_time); } # 타이머 끄고 시분초 저장
}
}
sub secToHHMMSS { # 정수로 된 초(seconds)를 받아들여 "06:17:20" 등의 형식의 문자열로 시분초를 리턴
my ($hour, $min, $sec);
$sec = $_[0] % 60;
$min = $_[0] / 60 % 60;
$hour = $_[0] / 3600;
sprintf "%02d:%02d:%02d", $hour, $min, $sec;
}
use strict; use warnings;
codeTimer("on");
print "타이머 켰습니다. 아무키나 누를 때까지 경과 시간을 측정합니다.\n";
<STDIN>; # 사용자가 아무키나 누를 때까지 대기
# 타이머 끈 후, 경과 시간 출력
print "경과 시간: " . codeTimer("off") . "\n";
#### 이하는 타이머에 필요한 함수들
{ # $old_time 을 static local variable 로 만들어 주기 위한 bare block
my $old_time;
sub codeTimer {
if ($_[0] eq "on") { $old_time = time(); } # 타이머 켜기
if ($_[0] eq "off") { secToHHMMSS(time() - $old_time); } # 타이머 끄고 시분초 저장
}
}
sub secToHHMMSS { # 정수로 된 초(seconds)를 받아들여 "06:17:20" 등의 형식의 문자열로 시분초를 리턴
my ($hour, $min, $sec);
$sec = $_[0] % 60;
$min = $_[0] / 60 % 60;
$hour = $_[0] / 3600;
sprintf "%02d:%02d:%02d", $hour, $min, $sec;
}
실행 결과 화면:
D:\Z>example.pl
타이머 켰습니다. 아무키나 누를 때까지 경과 시간을 측정합니다.
경과 시간: 00:00:04
D:\Z>example.pl
타이머 켰습니다. 아무키나 누를 때까지 경과 시간을 측정합니다.
경과 시간: 00:05:12
D:\Z>example.pl
타이머 켰습니다. 아무키나 누를 때까지 경과 시간을 측정합니다.
경과 시간: 24:00:06
D:\Z>
타이머 켰습니다. 아무키나 누를 때까지 경과 시간을 측정합니다.
경과 시간: 00:00:04
D:\Z>example.pl
타이머 켰습니다. 아무키나 누를 때까지 경과 시간을 측정합니다.
경과 시간: 00:05:12
D:\Z>example.pl
타이머 켰습니다. 아무키나 누를 때까지 경과 시간을 측정합니다.
경과 시간: 24:00:06
D:\Z>
맨 마지막의 24:00:06 이라는 결과는 컴퓨터의 시계를 하루 앞으로 변경한 후 강제로 얻은 결과입니다.
컵라면 타이머 (온라인 버전):
▶▶ 컵라면 타이머; 인터넷 요리용 타이머, 모래시계 Cooking Timer
스톱워치 (온라인 버전 스톱와치):
▶▶ 스톱워치, 초시계, 온라인 스톱와치, 100분의 1초 Stopwatch
tag: perl
Perl | 펄
<< Home