in reply to Search for text from user input

Oh, I see this post now after I posted to your node at Perl Script for searching an Image. I'm reading in LIFO posting order and apparently this subject has some history behind it!

It isn't clear to me at this point that this is a CGI application or what that would have to do with a "disk image" question in the other node (if any)? An app for an authenticated user on your internal network typing in some input data can be quite a different thing than a CGI web app in regards to the need for taint checking.

Maybe I'm just pointing out the obvious here, but opendir(DIR, "."); is usually not a good idea. I do that for quick hacks and testing, but not in code designed for others. The problem is that "." is the directory that THIS Perl script is executing in! Normally you want to separate the program code from the data. This allows the code to be more general purpose and you don't wind up with copies of the source code in a whole bunch of directories (which will eventually get "out of sync" with any updates to the "main code".

Anyway I think there has been some good advice given in the thread. I would move the Perl program to a different directory from the .jpg files. If I have some directory like this that will be used by many, I sometimes even take *myself* off of the "write permissions" for all of the files. This does add an extra step for me to change data for the files that I "own", but prevents some accidental modification when I am testing.

Replies are listed 'Best First'.
Re^2: Search for text from user input
by Nathan_84 (Acolyte) on May 13, 2010 at 11:52 UTC

    The "Perl Script for searching an Image" node and this one are not related. This one was for a friend.

    Thanks for everyone's help. I have managed to add a few more lines so that i can specify the directory as well. My code is below:

    #!/usr/bin/perl use strict; use warnings; print "Please enter text for string search: "; my $search=<STDIN>; chomp $search; print "Please specific a directory: "; my $directory=<STDIN>; chomp $directory; opendir(DIR, $directory) or die "Cannot open dir ($!)\n"; while (my $file = readdir(DIR)) { print "$file\n" if ( $file =~ /$search\.jpg|$search\.jpeg/i ); } closedir(DIR); exit 0;
      Ok.
      I think what you have is a bit complex. Consider the below... The two regex terms in the "grep{}" can be combined. I show a simple formulation without doing that. If you have just a few hundred files, tweaking this further won't make any performance difference at all. Clarity is often a lot more important than getting the nth degree of performance.
      #!/usr/bin/perl use strict; use warnings; print "Please enter text for string search: "; my $search=<STDIN>; chomp $search; print "Please specific a directory: "; my $directory=<STDIN>; chomp $directory; opendir(DIR, $directory) or die "Cannot open directory: $directory \n"; my @files = grep{ m/$search\.jpg$/i or m/$search\.jpeg$/i }readdir (DIR); print "No files found in $directory\n" unless @files; foreach my $file (@files) { print "$directory/$file\n"; }
      Oops: if $search is a regex, you will need \Q$search\E