Solved

Perl Double quote problem.

Posted on 2006-11-04
3
1,062 Views
Last Modified: 2013-12-25
Hello guys,im new to perl so i got a small problem here.Glad if anyone could help.
Im building a personal search engine and i would like to use double quotes to get the exact word/words.I got stuck and didnt know where to specify the double quotes to do the action.
 
My code:
#!c:/perl/bin/perl
read(STDIN, $buffer,$ENV{'CONTENT_LENGTH'});
@pairs = split(/&/,$buffer);
foreach $pair(@pairs){
($key,$value)=split(/=/,$pair);
$value =~ tr/+/ / ;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
#$value=~ s/\"//g; # strip double quotes
$formdata{$key}.="$value";
}
$search=$formdata{'search'};
open(INFO, "Docs.htm")or die "Can't open file for output"; # Open db for reading
@array=<INFO>;
close (INFO);
$count = 0;
print "Content-type:text/html\n\n"; #Content Header
print <<End_of_head;
<html>
<head><title>.::Search Results::.</title></head>
<body>
<h5>You Searched for :$search</h5>
End_of_head
   if($search eq "")
{
print "Error: Please type something";
}
else{
       #Both of the words
     $search =~ s/^\s+//;
     @cut = split(/\W/, $search);
     foreach $line  (@array){
     $count++;
     if (($line =~  /\b$cut[0]\b/i ) && ($line =~  /\b$cut[1]\b/i )) {
print <<End_of_line;
<font color="Red">Line<b> $count:</font> $line <br>
End_of_line
}
}
}
      #Exact word
    if ($search eq "'")
      {
       foreach $line  (@array){
     $count++;
     if ($line =~  /\b$search\b/i ){       
print <<End_of_line;
<font color="Red">Line<b> $count:</font> $line <br>
End_of_line      
      }
      }            
}
print <<End_of_Doc;
</body>
</html>
End_of_Doc
0
Comment
Question by:craziest
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
3 Comments
 
LVL 84

Accepted Solution

by:
ozo earned 400 total points
ID: 17873388
@cut = grep{defined}$search =~ /(\w+)|"([^"]+)"/g;
if( !@cut ){
   print "Error: Please type something";
}else{
     foreach $line  (@array){
         $count++;
         if ( !grep{$line !~  /\b\Q$_\E\b/i} @cut ){
print <<End_of_line;
<font color="Red">Line<b> $count:</font> $line <br>
End_of_line
          }
      }
}
0
 
LVL 3

Author Comment

by:craziest
ID: 17873423
Thats short and simple,worked well thanks!
if u dont mind,whats the regex for showing the tags in the file eg.
<TITLE> Hello</TITLE>
This doesnt show up when im searching.
Thanks again for your help.
0
 
LVL 84

Expert Comment

by:ozo
ID: 17873438
s/</&lt;/g, s/>/&gt;/g for $line;
0

Featured Post

On Demand Webinar: Networking for the Cloud Era

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This tutorial will discuss fancy secure registration forms, with AJAX technology support. In this article I assume you already know HTML and some JS. I will write the code using WhizBase Server Pages, so you need to know some basics in WBSP (you mig…
Recently I have been answering a lot of questions like this in IT forums that I frequent. The question posed is usually something along the lines of "We have software X installed and need to uninstall it for reason Y" or some other variant of the sa…
The viewer will learn how to dynamically set the form action using jQuery.
Video by: Mark
This lesson goes over how to construct ordered and unordered lists and how to create hyperlinks.

623 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question