>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.
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).
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: $!/;
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.
>$_ = join q//, <FH>;
>close FH;
>if ( ! m/$searchrx/s ) {
> print qq/pattern not found\n/;
> # do something
>}
>
>
>I'm not sure which is more "Perlish", but I hear "TMTOWTDI" is supposed to
>be valued, too. I welcome any criticism.
>
>Brian
HTH, Ken
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/