I love this mailing list! 

Once again, Uri, thank for your fruitful suggestions. It took me an afternoon 
of googling to understand them, but I see now that your suggestions are indeed 
“cleaner code” and I will implement them from now on.

Mostly I want to thank you for nailing me on using globals to pass data. I’ve  
come across this suggestion in the past but failed to appreciate it. Now I see 
that I have a lot of rewriting to do. An uphill job, but it needs to happen!

Rick


> On Sep 9, 2018, at 1:30 PM, Uri Guttman <u...@stemsystems.com> wrote:
> 
> On 09/09/2018 02:11 PM, Rick T wrote:
>> I don’t know whether my difficulty is with my perl or with my logic; but 
>> either way I need a fresh mind on this. 
>> 
>> If I test the subroutine by feeding it a file name that does not exist in 
>> any format, I expect it to die — but it does not.
>> 
>> Any good ideas will be greatly appreciated!
>> 
>> Rick
>> 
>> 
>> sub get_course_data {
>>     # check for course_file in .txt format; try to make one if not
>>     if ( (!-e "$pf{course_file}.txt" )  # if there's no .txt file
> 
> that is doing a hash lookup on the %pf hash. is that what you want?
> 
>>          and
>>          ( -e "$pf{course_file}.db"  )  # but there is a .db file
>>        ){
>>          convert_course_file();
> how does that sub know what file to process?
> 
>>     }
>>     else {
>>         die "Cannot find course file for $pf{course_file}";
>>     }
>> 
> 
> it would be much cleaner to rewrite that sub like this (untested rough code):
> 
> sub get_course_data {
> 
> # don't use globals to pass in data like your code does
> 
>     my( $course_base ) = @_
> 
>     my $txt_file = "$course_base.txt" ;
> 
> # this could be a one liner with a if modifier.
> # convert_course_file may not return anything useful but we leave anyway as 
> we found the file
> 
>     if ( -e $txt_file ) {
>         return convert_course_file( $txt_file ) ;
>     }
> 
> my $db_file = "$course_base.db" ;
> 
>     if ( -e $db_file ) {
>         return convert_course_file( $db_file ) ;
>     }
> die "can't find any $course_base file" ;
> 
> 
> alternative is to loop over the suffixes as most of the code is duplicated:
> 
>     foreach my $suf ( qw( txt db ) ) {
> 
>         my $file_name = "$course_base.$suf" ;
>         if ( -e $file_name ) {
>             return convert_course_file( $file_name ) ;
>         }
>     }
> 
> die "painful death because $course_base ain't there" ;
> 
>     

Reply via email to