Here is the running application: moviesSortByLengthVer3.cgi functions the same, but look at the much simpler, easier to understand PERL script code.
########################################################################### @myMovies = &readMoviesFileIntoArray("moviesPERL.txt"); @myMovies = &sortByNameAndQuoteLength( @myMovies ); $nestedOL = &makeNestedOLtags( @myMovies ); print header; print start_html(-title => "Movies SORTED by length - July 31st, 2002", -BGCOLOR => "FFFF44"), h2( "Movies sorted by Length and Nested OL lists\n[BR]\n" . "Version 3 - very modular, easier to understand and follow" ), $nestedOL, end_html;
###################################################################### sub sortByNameAndQuoteLength { @movies = prepareRecordsForSorting( @_ ); @movies = sort( @movies ); @movies = &restoreRecordFormatsToOriginal( @movies ); return @movies; }
###################################################################### sub prepareRecordsForSorting { @moviesPrep = @_; for ($i = 0; $i < @moviesPrep; $i++) { $sortReadyRecord = &makeSortReadyRecord( $moviesPrep[$i] ); $moviesPrep[$i] = $sortReadyRecord; } return @moviesPrep; }
###################################################################### sub makeSortReadyRecord { $theRec = shift( @_ ); @record = split (/\t/, $theRec); $quoteLen = &leadZeroLen( length $record[0] ); $nameLen = &leadZeroLen( length $record[1] ); $movieName = $record[1]; $r = $nameLen . "\t" . $movieName . "\t" . $quoteLen; unshift(@record, $r); $theRec = join ("\t", @record); return $theRec; }
###################################################################### sub restoreRecordFormatsToOriginal { foreach ( @_ ) { @record = split (/\t/, $_); shift(@record); shift(@record); shift(@record); $rec = join ("\t", @record); $_ = $rec; } return @_; # array now has records in their original format }