On Monday, April 15, 2002, at 02:40 , Ryan wrote:

> --At 4/15/02 4:25 PM -0500, PK Eidesis wrote:
>> sub makeCalendar {
>>  $type = @_;
>>  if($type eq "month") {
>>   print "all the code for a monthly calendar";
>>  elsif($type eq "week") {
>>   print "all the code for a weekly calendar";
>>  elsif($type eq "year") {
>>   print "all the code for a yearly calendar";
>>  }
>> }
>
> Personally, I'd change all those prints to returns -

We agree that they should be 'returns' but why not
the usual sort of predef approach


sub makeCalendar {
  my ($type) = @_;
  my $retString = ''; # safety set

  if($type eq "month") {  $retString = "all the code for a monthly calendar"
;
  } elsif($type eq "week") {  $retString = "all the code for a weekly 
calendar";
  } elsif($type eq "year") { $retString = "all the code for a yearly 
calendar"; }

  $retString ; # the default value would be returned on error case

}

Assuming that the branch tree is built in the order of
expected usage - or one might go with the fact that the
hash is the core of the perl reality space - and one should
have a reasonable expectation that it will be kosher:

sub doCal {
         my ($type) = @_;
         my %retHash = (
                 'month' => 'all the code for a monthly calendar',
                 'week' => 'all the code for a weekly calendar',
                 'year' => 'all the code for a yearly calendar',
         );

         $retHash{ $type }; # defaults to empty if not used

} # end doCal

Since this is when the player starts thinking in terms of:

sub doMon { my $string = "all Your Months Be Mine"; }

sub doWeek {my $string = "all Your Weeks Be Mine";}

sub doYear { my $string = "this is the year line";}

sub doCal {
         my ($type) = @_;
         my %retHash = (
                 'month' => \&doMon,
                 'week' => \&doWeek ,
                 'year' => \&doYear ,
         );

         no strict 'refs'; # must skank around the ref indirection here
         my $retString = $retHash{ $type }->()
                 if ( $retHash{$type } ); # if we have it

         $retString ; # return what ever the function passed

} # end doCal

cf:
http://www.wetware.com/drieux/CS/lang/Perl/Beginners/HashSwitch.txt

ciao
drieux

---

Reply via email to