calypso has asked for the wisdom of the Perl Monks concerning the following question:

All images in my directory all start with a 6 digit number, right now the script displays all of the images in that directory and subdirectories. How do I make my form pick up the requested image. Like if I type 012345, it should only display the images that start with the name 012345.
#find.pl #!/usr/bin/perl -w use CGI::Carp qw(fatalsToBrowser); use strict; use CGI qw/(:standard)/; use warnings; use Cwd; use File::Find::Rule; my $q = new CGI; my $imageDir = '/path/to/images/'; my $image; my @files; my $Num = qr/^\d{6,6}.+?/i; my $imageNum = $q->param('imageNum'); chdir($imageDir) or die $!; @files = File::Find::Rule->file ->name($Num) ->in($imageDir); print $q->header(); foreach my $image (@files){ my $webimage = $image; $webimage =~ s!/path/to/image/!!; if($Num){ print <<HTML; <ahref="$webimage">$webimage</a> HTML } else{ print <<HTML; sorry, cannot be found<br> HTML } } print <<HTML; print <<HTML; <form name="find" method="POST" action="find.pl"> <input type="text" size="10" name="imageNum" maxlength="30"><br> <input type="submit" value="submit"><br> </form> HTML print $q->end_html;

Replies are listed 'Best First'.
Re: help with form querying
by cowboy (Friar) on Feb 07, 2005 at 20:37 UTC
    You could easily do it with grep:
    @files = grep(/^$imageNum/, @files);
    Another option, would be to use the input to adjust the name passed to File::Find::Rule. (Although you'll want to be sure you verify the data the user submits if you do it that way)
Re: help with form querying
by blueberryCoffee (Scribe) on Feb 07, 2005 at 20:39 UTC
    use the glob function:
    foreach my $file (glob("/directory/$searchString")) { # do something with filename; make a link, ect... }
    $searchString would be any type of string you could type at a unix command line. So 12456* entered in a form and passed to this loop would return all files starting with 12456 in "directory".

    Have fun,
      Is there like a glob module I need to add or use before the glob function works? cos right now its not.
Re: help with form querying
by ww (Archbishop) on Feb 07, 2005 at 22:09 UTC
    you may also want to put a space between <a --and-- href=...> in the second line of:
    print <<HTML; <ahref="$webimage">$webimage</a> HTML
    so the link will work.