This script loops fine but the search only works the first time - nothing 
happens for a second search.  Any idea why?

Terri

#!/usr/bin/perl -w
use strict;

my $exit = 1;
my $bigmatch = 0;
my %rec = ();
my $search = '';

sub read_addr {
    my %curr = ();
    my $curr = '';
    my $key = '';
    my $val = '';

    while (<>) {
        chomp;
        if ($_ ne '***') {
            ($key, $val) = split(/: /,$_,2);
            $curr{$key} = $val;
        }
        else { last; }
    }
    return %curr;
}

sub perform_search {
    my ($str, %rec) = @_;
    my $matched = 0;
    my $i = 0;
    my $thing = '';

    my @things = $str =~ /("[^"]+"|\S+)/g;

    while ($i <= $#things) {
        $thing = $things[$i];

        if (!$matched) {
            $matched = &isitthere($thing, %rec);
            $i++;
        }
        else { $i++; }
    }

    if ($matched) {
        $bigmatch = 1;
        print_addr(%rec);
    }
}

sub perform_search2 {
    my ($str, %rec) = @_;
    my $matched = 0;
    my $i = 0;
    my $thing = '';

    my @things = $str =~ /LIS ("[^"]+"|\S+)/g;

    while ($i <= $#things) {
        $thing = $things[$i];

        if (!$matched) {
            $matched = &isitthere($thing, %rec);
            $i++;
        }
        else { $i++; }
    }

    if ($matched) {
        $bigmatch = 1;
        print_addr(%rec);
    }
}

sub isitthere {
    my ($pat, %rec) = @_;
    foreach my $line (values %rec) {
        if ($line =~ /$pat/) {
            return 1;
        }
    }
    return 0;
}

sub print_addr {
    my %record = @_;
    print "\n*********************************\n";
    foreach my $key (qw(ID Reference Title Instructor Credit Days Time 
Location)) {
        if (defined($record{$key})) {
            print "$key: $record{$key}\n";
        }
    }
}

my $in = '';
while ($exit) {
        print "\n1. Search by ID\n";
        print "2. Search by Title\n";
        print "3. Search by Instructor\n";
        print "4. Quit\n\n";
        print "Choose a number: ";

        chomp($in = <STDIN>);


        if ($in eq '1') {
        my $id = '';
        print "Enter an ID: ";
        chomp ($id = <STDIN>);

        my %rec = ();
        while () {
        %rec = &read_addr();
        if (%rec) {
        &perform_search2($id, %rec);
        } else {
        if (!$bigmatch) {
            print "Nothing found.\n";
        } else { print "*********************************\n"; }
        last;
    }
}
} if ($in eq '2') {
        my $title = '';
        print "Enter a title: ";
        chomp($title = <STDIN>);

        my %rec = ();
        while () {
        %rec = &read_addr();
        if (%rec) {
        &perform_search($title, %rec);
        } else {
        if (!$bigmatch) {
            print "Nothing found.\n";
        } else { print "*********************************\n"; }
        last;
    }
}
} if ($in eq '3') {
        my $teach = '';
        print "Enter an Instructor: ";
        chomp($teach = <STDIN>);

        my %rec = ();
        while () {
        %rec = &read_addr();
        if (%rec) {
        &perform_search($teach, %rec);
        } else {
        if (!$bigmatch) {
            print "Nothing found.\n";
        } else { print "*********************************\n"; }
        last;
    }
}
} if ($in eq '4') {
        $exit = 0;
        }

}




_________________________________________________________________
Send and receive Hotmail on your mobile device: http://mobile.msn.com


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to