instcode_format
Six arguments are required:
e.g., @{$codetitles}= ("year","semester","department","number")
%{$$cat_titles{'Semester'}} = (fs = > 'Fall',ss = > 'Spring',
us = > 'Summer');
At MSU, "fs13nop590" is an example of an institutional course code; including the following entry in the instcodes hash passed in by reference - $$instcodes{'43551dedcd43febmsul1'} = 'fs13nop590' would cause the $codes perl data structure to be populated.
fs13nop590 would be split as follows:
$$codes{{'year'} = '2013'
$$codes{'semester'} = 'Fall'
$$codes{'department'} = 'nop'
$$codes{'number'} = '590'
The routine used at MSU is as follows:
sub instcode_format {instcode_defaultsmy ($dom,$instcodes,$codes,$codetitles,$cat_titles,$cat_order) = @_;}@{$codetitles} = ("Year","Semester","Department","Number");
%{$$cat_titles{'Semester'}} = (
fs => 'Fall',);ss => 'Spring',
us => 'Summer'
@{$$cat_order{'Semester'}} = ('ss','us','fs');
foreach my $cid (keys %{$instcodes}) {
if ($$instcodes{$cid} =~ m/^([suf]s)(\d{2})(\w{2,3})(\d{3,4}\w?)$/) {}$$codes{$cid}{'Semester'} = $1;}$$codes{$cid}{'Department'} = $3;
$$codes{$cid}{'Number'} = $4;
my $year = $2;
my $numyear = $year;
$numyear =~ s/^0//;
$$codes{$cid}{'Year'} = $year;
unless (defined($$cat_titles{'Year'}{$year})) {
$$cat_titles{'Year'}{$year} = 2000 + $numyear;}my $outcome = 'ok';
return $outcome;
Three arguments are required:
($defaults)
At MSU, the regular expression fragments used mirror those included in the regular expression used in instcode_format() to split an institutional course code into its component parts.
sub instcode_defaults {my ($dom,$defaults,$code_order) = @_;}%{$defaults} = (
'Year' => '\d{2}',);'Semester' => '^[sfu]s',
'Department' => '\w{2,3}',
'Number' => '\d{3,4}\w?',
@{$code_order} = ('Semester','Year','Department','Number');
return 'ok';