Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

Perl Double quote problem.

Posted on 2006-11-04
3
Medium Priority
?
1,075 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
  • 2
3 Comments
 
LVL 85

Accepted Solution

by:
ozo earned 1600 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 85

Expert Comment

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

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

I hope you'll find this tutorial useful and interesting. So let's try to extend Tcl with a new package.  For anyone more deeply interested please check out the book "Practical Programming in Tcl and Tk". It's really one of the best written books abo…
This article is meant to give a basic understanding of how to use R Sweave as a way to merge LaTeX and R code seamlessly into one presentable document.
Learn the basics of strings in Python: declaration, operations, indices, and slicing. Strings are declared with quotations; for example: s = "string": Strings are immutable.: Strings may be concatenated or multiplied using the addition and multiplic…
The viewer will learn how to count occurrences of each item in an array.
Suggested Courses

581 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