Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I want to extract javaScript code between SCRIPT tags from .html file and write this code to the myJavaScript.txt file. I have this code.
while(<STDIN>) { $line1=<STDIN>; if($line1=="<SCRIPT") { #print $_; print $line1; } }
All kind of help I will really appreciate. P.S. I do not have experience with Perl and I started to learn it 2 days ago. English is my second language and I am appologize if I made some spelling mistake Deki

edited by boo_radley : removed pre tag

Replies are listed 'Best First'.
(jeffa) Re: I/O redirection
by jeffa (Bishop) on Jun 03, 2002 at 02:17 UTC
    I prefer HTML::TokeParser for this kind of problem:
    use strict; use HTML::TokeParser; my $content = do {local $/; <STDIN>}; my $parser = HTML::TokeParser->new(\$content); open (OUT, '>', 'myJavaScript.txt') or die $!; while ($parser->get_tag('script')) { print OUT $parser->get_text; }
    Say your HTML file is named javascript.html and this script is named parse_js.pl, you can run this program like so:
    ./parse_js.pl < javascript.html
    

    UPDATE
    Homework, eh? Well, your teacher is more than likely not going to allow you to use a CPAN module for this assignment, because they probably want you to learn about basic I/O instead. You more than likey also do not have HTML::TokeParser installed on your computer, which will cause the program to not work.

    You will learn more by taking this problem to your teacher instead of bringing it to us. We can show you some of the best ways to solve a problem that will consequently get you a bad grade in your class. Do yourself a favor, talk to your teacher.

    UPDATE UPDATE:
    You are welcome, but you should still talk to your teacher if you do not understand what you are doing - hopefully they don't mind talking to students during their office hours. Good luck!

    jeffa

    L-LL-L--L-LL-L--L-LL-L--
    -R--R-RR-R--R-RR-R--R-RR
    B--B--B--B--B--B--B--B--
    H---H---H---H---H---H---
    (the triplet paradiddle with high-hat)
    
      I named how you expline to me but I could not get anything. Also it does not return me error. In DOS I wrote exactli like this:
      perl parse_js.pl<javascript.html
      In school our techer explened to us to use like this to execute.
      perl ass.pl<input.html>myJavascript.txt
      p.s. Thank you again for your help!!!!!!!!!!!!!!!
        It is working but I need to extract as well script tags on the text file. Like this
        <script language="JavaScript"> ..... </script>
        P.s. Anyway Thank you so much!!!!!!!!!
      Thank you. It working!!!!!!!!
Re: I/O redirection
by jepri (Parson) on Jun 03, 2002 at 01:49 UTC
    <STDIN> is a function that reads in a line. So you are throwing away a line each time you go through the loop. Try this untested code:

    while ( 1 ) { if ( scalar(<STDIN>) =~ m'<script'i ) { while ( 1 ) { $line = <STDIN>; exit if ($line =~ m'</script'i); print $line; }}}

    That's so ugly... I get a headache looking at it. You'll have better luck looking at the module HTML::Parser.

    ____________________
    Jeremy
    I didn't believe in evil until I dated it.

      Thank you very much for sugestion. I will try. I realy beginner in this. Deki
      If you are still on this page I would like to ask you to help me to retrive as well script tags and everything what is between these tags. And also I have one more JavaScript bloks. P.S. I have to be onest I started to read Perl 2 days ago. I had problem to set up path on my win 98 because I had problem wiht autoexec.bat file. How I can see you so good in this and If you have time help me . This is my assignment for tomorrow. What you gave to me. Working perrfect!!! Thank you very mach.
        Sorry, this sort of stuff is really boring, which is why I use someone elses module to do it.

        A step in the right direction for you would be to write some code so that when you get a line with a SCRIPT tag in it you break up the line at the SCRIPT tag. Commands like split will help a lot.

        You aren't making friends with me by asking me to do your assignment for you. If I do your assignments, will you give me your degree?

        ____________________
        Jeremy
        I didn't believe in evil until I dated it.