Tips in Action‎ > ‎기타‎ > ‎

윤년계산, 월별 날짜수 계산 서브루틴

-시스어드민님의 글입니다. (이름을 밝히지 않으신 어느 분이 2006년 5월에 제공하심.)

래리가 쓴 Programing Perl이란 책에 나와 있는 간단한 윤년계산 공식과 그것을 약간 응용한 월별 날짜수 계산 서브루틴입니다. 생각보다 간단하죠? 이것이 펄이 가지고 있는 큰 장점이 아닌가 생각됩니다. 펄을 처음에 공부할때 두개의 변수값을 서로 바꿀때 펄의 표현방식인

($a, $b) = ($b, $a) 
을 보고 감탄했던 기억이 나는 군요. 얼마전 루비(Ruby) 세미나에 참석할 기회가 있었는데 루비 구문이 펄과 상당히 유사하더군요. 한마디로 간단명료 그리고 직관적... 강사는 그것을 생산성에 연관지어서 설명하더라구요. 실행속도는 중요치 않다고 하면서...

암튼, 많이들 이용하시길 바랍니다.

############################################## 
# Function: IsLeapYear 
# Input: year (yyyy) 
# Output: true if leap year (윤년일 경우), otherwise false 
# Depedencies: None 
############################################## 
sub IsLeapYear { 
  my $year = shift; 
  return 
         $year %   4? 0 : 
         $year % 100? 1 : 
         $year % 400? 0 : 1; 
} 
############################################### 
# Function: DaysofMonth 
# Input: year (yyyy), month (1-12) 
# Output: the number of total days of the month in the year 
# Depedencies: IsLeapYear() 
############################################### 
sub DaysofMonth { 
  my ($month, $year) = @_; 
  return 
         ($month ==  1)? 31: 
         ($month ==  2)? (IsLeapYear($year)? 29: 28): 
         ($month ==  3)? 31: 
         ($month ==  4)? 30: 
         ($month ==  5)? 31: 
         ($month ==  6)? 30: 
         ($month ==  7)? 31: 
         ($month ==  8)? 31: 
         ($month ==  9)? 30: 
         ($month == 10)? 31: 
         ($month == 11)? 30: 
         ($month == 12)? 31: 0; 
}
Comments