in reply to Critique

This doesn't prompt for a filename, as I find it easier to just redirect the output via the command line.

#! perl -slw use strict; use Date::Manip; sub prompt{ printf $_[ 0 ]; chomp( local $_ = <stdin> ); $_; } my @breakfast = qw[ bagel cereal toast yogurt ]; my @lunch = qw[ sandwich milkshake pb&j hoagie ]; my @dinner = qw[ pasta rice chicken steak ]; my( $start, $end ) = ('')x 2; $start = prompt 'Enter start date: ' until $start = ParseDate( $start +); $end = prompt 'Enter end date: ' until $end = ParseDate( $end +); do{ my $date = UnixDate( $start, '%F' ); print $date, $/, '-' x length $date; print 'Breakfast: ', $breakfast[ rand @breakfast ]; print 'Lunch : ', $lunch[ rand @lunch ]; print 'Dinner : ', $dinner[ rand @dinner ]; print '-' x length $date, $/; } until( not Date_Cmp( $start = DateCalc( $start, '+1 day' ), $end ) ); __END__ C:\test>stuff Enter start date: 1st jan 2003 Enter end date: 2003/02/01 Wednesday, January 1, 2003 --------------------------- Breakfast: toast Lunch : pb&j Dinner : rice --------------------------- Thursday, January 2, 2003 -------------------------- Breakfast: bagel Lunch : hoagie Dinner : chicken -------------------------- Friday, January 3, 2003 ...

Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail
Hooray!
Wanted!

Replies are listed 'Best First'.
Re: Re: Critique
by ihb (Deacon) on Dec 08, 2003 at 11:44 UTC

    Nice code!

    But unfortunately I found a bug. If $start is after $end then your routine will loop till death.

    Just changing not to 0 <= won't do the whole trick though, as your construction still would print the meals for the first date. A regular for/while loop would suite better here.

    This is a good example of why one shouldn't have == instead of <= or >= unless one has to in loop conditions.

    ihb

      That's not a bug, that's GIGO :)

      How could start be after end?


      Examine what is said, not who speaks.
      "Efficiency is intelligent laziness." -David Dunham
      "Think for yourself!" - Abigail
      Hooray!
      Wanted!

        Someone inputs a start date that's after the end date...?