Cappadonna3030 has asked for the wisdom of the Perl Monks concerning the following question:
Hello:
I am attempting to build a reverse indexed library using mysql. Its based on the code from the CGI Programming book by O'Reilly.
The script is listed below:
#!/usr/bin/perl -w use strict; use DBI; use File::Find; use Fcntl; use Getopt::Long; use Text::English; use constant TYPE_DEFAULT => "article"; my (%opts, @files, $stop_words, $type); #User input GetOptions( \%opts, "dir=s", "cache=s", "stop=s", "ignore", "type=s", "numbers", "stem"); die usage() unless $opts{dir} && -d $opts{dir}; $opts{'type'} ||= TYPE_DEFAULT; #Get file names and build an array of files. find(sub{push @files, $File::Find::name}, $opts{dir}); $stop_words = load_stopwords($opts{stop}) if $opts{stop}; process_files(\@files, \%opts, $stop_words); sub load_stopwords { my $file = shift; my $words = {}; local *INFO, $_ or die "Can't open stop file: $file\n" unless -e $file; open INFO, $file or die "$!\n"; while(<INFO>) { next if /^#/; $words->{lc $1} = 1 if /(\S+)/; } close INFO; return $words; } sub process_files { #input variables: my($files, $opts, $stop_words) = @_; local( *FILE, $_ ); local $/ = "\n\n"; my $type = $opts{type}; my $dir = $opts{dir}; my %index; #Establish database variables: my($dbh, $sth1, $sth2); local(*FILE); local $/ = "\n\n"; my $file_id = 0; # initializing counter variable #Establish Database Connection $dbh = ("DBI:mysql:host=localhost; database=blah", "blah", "blah", {PrintError => 0, RaiseError=>1}); for ( my $file_id = 0; $file_id < @$files; $file_id++ ) { my $file = $files[$file_id]; my %seen_in_file; next unless -T $file; #print STDERR "Indexing $file\n"; #$index->{"!FILE_NAME:$file_id"} = $file; #Step 1: Create Library of Files: $sth1 = $dbh-> prepare("insert into library va +lues ($file, $dir, $type)"); $sth1-> execute(); open FILE, $file or die "Cannot open file: $file!\n"; while ( <FILE>
) { tr/A-Z/a-z/ if $opts{ignore}; s/<.+?>//gs; # Note this doesn't handle < or > i +n comments or js while ( /([a-z\d]{2,})\b/gi ) { my $word = $1; next if $stop_words->{lc $word}; next if $word =~ /^\d+$/ && not $opts{number +}; ( $word ) = Text::English::stem( $word ) if $o +pts{stem}; $index->{$word} = ( exists $index->{$word} ? "$index->{$word}:" : "" ) . "$file_id" unl +ess $seen_in_file{$word}++; } #New Flava: Take Contents out of hash Table and into D +B foreach my $words (keys(%index)) { $sth2 = $dbh-> prepare('insert into catalog values ($words, $index{$words})'); $sth2 -> execute(); } } } sub usage { my $usage = <<End_of_Usage; Usage: $0 -dir directory [options] The options are: -ignore Case-insensitive index -stop Path to common words file -stem Stem words -type File Type-- either email or article End_of_Usage return $usage; }
The main problem is that I keep getting these errors:
Useless use of a constant in void context at libbuilder.pl line 77. Useless use of a constant in void context at libbuilder.pl line 77. Useless use of a constant in void context at libbuilder.pl line 77. Global symbol "$index" requires explicit package name at libbuilder.pl + line 109. Global symbol "$index" requires explicit package name at libbuilder.pl + line 109. Global symbol "$index" requires explicit package name at libbuilder.pl + line 110. Missing right curly or square bracket at libbuilder.pl line 147, at en +d of line syntax error at libbuilder.pl line 147, at EOF Execution of libbuilder.pl aborted due to compilation errors.
What gives? Where is my error?
Edit: g0n - added readmore tags
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Finding local vs Global Error
by Zaxo (Archbishop) on Sep 20, 2005 at 03:07 UTC | |
|
Re: Finding local vs Global Error
by Tanktalus (Canon) on Sep 20, 2005 at 03:13 UTC | |
|
Re: Finding local vs Global Error
by graff (Chancellor) on Sep 20, 2005 at 03:32 UTC | |
|
Re: Finding local vs Global Error
by Cappadonna3030 (Sexton) on Sep 20, 2005 at 23:52 UTC | |
by jZed (Prior) on Sep 21, 2005 at 00:14 UTC | |
by Cappadonna3030 (Sexton) on Sep 21, 2005 at 01:15 UTC | |
|
Re: Finding local vs Global Error
by Cappadonna3030 (Sexton) on Sep 21, 2005 at 02:33 UTC |