#!/usr/bin/perl -w use strict; use Getopt::Std; use vars qw($sched); my (%opts, $item, $session, $result, %number, @number, $reminder); my ($day, $hour, $place); my ($sched_old, $sched_new); getopts("r", \%opts); $sched = [ { name=>'微積分', cat=>'四1A', spacetime=>['二234/M-516' ]}, { name=>'微積分', cat=>'進1A', spacetime=>['三AB/M-515', '四D/T2-116' ]}, { name=>'資管規劃', cat=>'進1A', spacetime=>['一C/T2-306' ]}, { name=>'班會', cat=>'進1A', spacetime=>['四A/T1-502' ]}, { name=>'Script', cat=>'四2B', spacetime=>['三789/M-516' ]}, { name=>'OH', cat=>'*', spacetime=>['一AB/L-737', '二89/L-737' ]}, { name=>'導生小組', cat=>'進1A', spacetime=>['四89/L-737' ]}, { name=>'專題 A', cat=>'四3B', spacetime=>['四6/L-737' ]}, { name=>'專題 B', cat=>'四3B', spacetime=>['二6/L-737' ]}, { name=>'研究討論', cat=>'研究生',spacetime=>['二7/L-737' ]}, # { name=>'演算法概論', cat=>'進4A', spacetime=>['四BCD/G-212' ]}, ]; $sched = [ { name=>'商業英文', cat=>'日2C', spacetime=>['一56/M-516' ]}, { name=>'商業英文', cat=>'進2A', spacetime=>['四BC/M-516' ]}, { name=>'行動碟', cat=>'進3A', spacetime=>['四DE/M-516' ]}, { name=>'自由文化', cat=>'日1C', spacetime=>['三9A/M-516' ]}, { name=>'OH', cat=>'*', spacetime=>['四78/L-737' ]}, { name=>'OH', cat=>'*', spacetime=>['二34/L-737' ]}, # { name=>'演算法概論', cat=>'進4A', spacetime=>['四BCD/G-212' ]}, ]; %number = ("一"=>1, "二"=>2, "三"=>3, "四"=>4, "五"=>5); undef @$result; foreach $item (@$sched) { foreach $session (@{$item->{spacetime}}) { ($day, $hour, $place) = $session =~ m#^(..)([\w]+)/(.*)$#; $day = $number{$day}; my ($h, $t); foreach $h (split //, $hour) { $t = $h =~ /\D/ ? 2 : $h >= 5 ? 1 : 0; # $reminder->[$day][$t] = 1; @{$result->[$day]{$h}} = ($item->{name}, "$item->{cat}:$place"); } } } if ($opts{r}) { # 為 remind 命令產生輸出 for $day (1..5) { my ($s, $i); my (@t) = qw(早 午 晚); for ($i=0; $i<3; ++$i) { $s .= $t[$i] if $reminder->[$day][$i]; } ### to be continued ... Try ./sched -r ### print "$day: $s\n" if defined $s; } } else { # 產生 html 表格 my ($extra) = ' class="em"'; print < eof print " 一"; foreach $day (qw(二 三 四 五)) { print " $day"; } print "\n\n"; foreach $hour (split //, "1234N56789ABCDE") { print " $hour
 \n"; foreach $day (split //, "12345") { my ($t) = $result->[$day]{$hour}; # print " ", print " ", (defined $t->[0] ? "$t->[0]
$t->[1]" : ""), "\n"; } print "\n"; } print < eof }