Ken Slater wrote:
> From: Brian F. Yulga [mailto:[email protected]]
> On Wed, 2 Mar 2011, Matt wrote:
>> The easiest way in my opinion is to use the 'grep' function like
>> this:
>>
>> my $searchstring="whatever"; open CFG, '<', $_file || die("could
>> not open file: $_file!"); my @data=<CFG>; close CFG; if ( grep
>> /$searchstring/i, @data ) { print "$searchstring found\n"; }
>>
>
> This sorta worked. Needed a minor change.
>
>> unless ( grep /$searchstring/i, @data ) { print "$searchstring
>> not found\n";
>
> Thanks.
>
>
> My apologies if I'm beating a dead horse here, but I'm new to Perl
> and thought of a slightly different approach:
>
>
> my $searchrx = qr/whatever/; # or q/whatever/ if you don't need
> regexp
This is probably personal preference, but I prefer to provide a more
meaningful name rather than using @ARGV. Plus you have lost the
filename once you 'shifted' @ARGV in the open statement. May want to
use the file name in the open error statement or later.
I agree with you, saving the filename to a variable is probably a better
practice, in general. In this context it wasn't specified that it was
needed later, so I opted to just 'shift' it to use once.
Also, I would not use the '/' as your quote delimiter - that's too
recognizable as being used as the pattern match delimiter. Use actual
double quotes (") unless there are double quotes in the string - also
less typing. Instead of '/' may want to use '{' and '}' if using qq
(see perldoc perlop, Quote and Quote-like Operators).
Good point. I started using generic quotes almost exclusively when I
discovered that they avoided some of the possible shell-interpolation
issues that arise when executing perl "one-liners". I've probably taken
it too far. I can see that '/' is not a great idea. Besides '{' and
'}' as quote delimiters, do you think it's generally tolerated to use
'(', ')', '[', ']' ?
my $fileName = shift @ARGV or die "You did not specify a
filename\n";
> @ARGV or die qq/you didn't specify a filename\n/;
Use lexical variable for filehandle. Makes things easier - such as
passing to a function.
open my $FH,'<', $fileName or die "Error opening $fileName: $!\n";
> open FH, q/</, shift @ARGV or die qq/file open error: $!/;
Okay, I'll work on breaking that habit. My first "lessons" in Perl used
the "open FH" convention, and I just got used to it.
The join is unnecessary, set the input_record_separator ($/) to undef
or use a local copy of $/ (see perldoc perlvar). If this is
undefined, the entire file will be read into a variable.
Oh, I totally forgot about the input_record_separator ( $/ )...
That's WAY better (actually when I wrote the 'join', I was thinking that
I shouldn't need to do it that way!)
Thanks much for the suggestions,
Brian
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/