Perlで設定したカレンダーを表示したいのですが、所望の動作にならず困っています。
★実行結果
Seireki 2005 year 6 month
Sun Mon Thu Wed Thu Fri Sat
※日付が出てこないです
下記がソースコードになります。
何か改善点等ございましたら、ご教示の程よろしくお願いいたします。
★ソースコード
3 #######################Setting Calendar###################
4
5 $year = 2005 ;
6 $month = 6 ;
7 $days = &getMonthdDays($year, $days) ;
8
9 &printCalendar($year, $month, $days) ;
10
11
12 ####################Get a date######################
13
14 sub getMonthdDays{
15 local ($y, $m) = @_ ;
16
17 if($m == 1 || $m == 3 || $m == 5 || $m == 7 ||
18 $m == 8 || $m == 10 || $m == 12 ){
19 return 31 ;
20 }
21 elsif($m == 4 || $m == 6 || $m == 9 || $m == 11 ){
22 return 30 ;
23 }
24 elsif($m ==2){
25 if($y % 4 == 0 && $y %100 == 0 || $y % 400 == 0 ){
26 return 29 ;
27 }
28 else{
29 return 28 ;
30 }
31 }
32 else{
33 return 0 ;
34 }
35 }
36
37
38 #######################Get a day###################
39 ##return value, 0:Sun 1:Mon 2:Thu 3:Wed 4:Thu 5:Fri: 6:Sat##
40
41 sub getweekday{
42 my ($y, $m, $d) = @_ ;
43 if($m == 1 || $m ==2){
44 $y-- ;
45 $m += 12 ;
46 }
47 ##Zeller's congruence##
48 my $w = ($y + int($y / 4) - int($y / 100)
49 + int($y / 400) + int((13 * $m + 8) / 5) + $d) % 7 ;
50 return $w ;
51 }
52
53
54 #################Display Calender####################
55
56 sub printCalendar{
57 ($y, $m, $d) = @_ ;
58 $week = &getweekday($y, $m, 1) ;
59
60 print "\nSeireki $y year $m month \n" ;
61 print "--------------------------------\n" ;
62 print "Sun Mon Thu Wed Thu Fri Sat \n" ;
63 print "--------------------------------" ;
64
65 for($i = 0; $i < $week; $i++){
66 print " " ;
67 }
68 $w = $week ;
69 for($i = 1; $i <= $d; $i++){
70 if($w % 7 == 0 && $w >= 6){
71 print "\n" ;
72 }
73 printf("%4d", $i) ;
74 $w++;
75 }
76 }
77
回答3件
あなたの回答
tips
プレビュー