I have not used strict
Why not? You obviously know about strictures so why are you not using them (see The strictures, according to Seuss)?
In general don't use local. It doesn't do what you think it does. Use my instead.
$opt2 !~ /[123] probably doesn't do what you think it does. It will match any string containing either 1, 2 or 3 as part of the string. It would match 971238 for example.
Built in functions such as chomp generally are used without parentheses: chomp $value or chomp @values.
I'd change init_input_filenames to:
sub init_input_filenames { my ($type) = @_; my $dir = "."; my %fileNames; $type ||= 'tokenized'; $fileNames{plant} ="$dir/plant.$type"; $fileNames{plant_hist} ="$dir/plant.$type.hist"; $fileNames{plant_titles} ="$dir/plant.titles"; $fileNames{tank} ="$dir/tank.$type"; $fileNames{tank_hist} ="$dir/tank.$type.hist"; $fileNames{tank_titles} ="$dir/tank.titles"; $fileNames{perplace} ="$dir/perplace.$type"; $fileNames{perplace_hist} ="$dir/perplace.$type.hist"; $fileNames{perplace_titles} ="$dir/perplace.titles"; $fileNames{common_words} ="$dir/common_words.$type"; return \%fileNames; }
which halves the code and removes a pile of global variables. The down side is that strict checking doesn't catch misspelled keys for the fileNames hash, but then, without strictures you weren't checking those anyway! At least by using the hash technique you make it clearer where the names are used and where they come from.
In reply to Re: Help with a perl code
by GrandFather
in thread Help with a perl code
by varunreeves
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |