home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / languages / perl / tutorial / eg / today < prev    next >
Encoding:
Text File  |  1990-01-14  |  911 b   |  30 lines

  1. #!/usr/bin/perl
  2. #
  3. # today - print out last month, this month, and next month from
  4. #      cal program, with today in reverse video (vt100 hardcoded)
  5. #
  6. # shows good use of pipes
  7.  
  8. $SO = "\033[7m";
  9. $SE = "\033[m";
  10.  
  11. ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
  12. $mon++;         # 0 based
  13. $year += 1900;
  14. # select next year and prev year "wrapping" at 12 months
  15. $nmon = $mon + 1; $nyear = $year; if ( $nmon == 13 ) { $nmon =  1; $nyear++; }
  16. $pmon = $mon - 1; $pyear = $year; if ( $pmon ==  0 ) { $pmon = 12; $pyear--; }
  17.  
  18. open ( prev, "cal $pmon $pyear |" );
  19. open ( cur, "cal $mon $year |" );
  20. open ( foll, "cal $nmon $nyear |" );
  21.  
  22. until (eof(prev) && eof(cur) && eof(foll)) {
  23.     chop($prev = <prev>);
  24.     chop($foll = <foll>);
  25.     chop($cur = <cur>); 
  26.     $len = 22; 
  27.     $cur =~ s/\b$mday\b/$SO$mday$SE/ && $len += 7;
  28.     printf (sprintf("%%-20s   %%-%ds   %%-20s\n", $len), $prev, $cur, $foll);
  29.