On 3/23/06, Christopher Spears <[EMAIL PROTECTED]> wrote:
> I've been reading the Intermediate Perl book and am
> trying to solve one of the exercises.  I wrote a
> script that takes input from the keyboard and uses the
> input as a regular expression to search for files in a
> directory.  If the script finds a match, the filename
> is printed out.
>
> #!/usr/bin/perl -w
> use strict;
>
> print "Enter a regular expression: ";
> chomp(my $pattern = <STDIN>);
>
> my $some_dir = "./ex2";
> opendir(DIR, $some_dir) || die "Can't open $some_dir:
> $!";
> my @filenames = readdir(DIR);
>
> foreach (@filenames) {
>         if (eval {$_ =~ /$pattern/} ) {
>            print $_ . "\n";
>         }
>         print "Continuing after error: $@" if $@;
> }
>
> I want the program to keep asking the user for a
> pattern until an empty string is entered.  I
> remembered how to do this once, but I am returning to
> Perl after learning another language.  I need to jog
> my memory!
>

<> will do what you're looking for, or <STDIN> if you prefer.:

    my $some_dir = "./ex2";
    opendir(DIR, $some_dir) || die "Can't open $some_dir: $!\n";
    my @filenames = readdir(DIR);

    while ( chomp(my $pattern = <>) ) {
        last if $pattern =~ /^\s*$/;
        foreach (@filenames) {
            if (eval {$_ =~ /$pattern/} ) {
                print $_ . "\n";
           }
           print "Continuing after error: $@" if $@;
        }
    }

If you're willing to just go with the standard EOF (ctrl-d on most
platforms), you don't even need to test the return value. STDIN/<>
close automatically when they encounter EOF and the loop will exit.

-- jay
--------------------------------------------------
This email and attachment(s): [  ] blogable; [ x ] ask first; [  ]
private and confidential

daggerquill [at] gmail [dot] com
http://www.tuaw.com  http://www.dpguru.com  http://www.engatiki.org

values of β will give rise to dom!

Reply via email to