Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

Re^2: Perl RE; how to capture, and replace based on a block?

by taint (Chaplain)
on Dec 18, 2013 at 05:51 UTC ( #1067594=note: print w/replies, xml ) Need Help??

in reply to Re: Perl RE; how to capture, and replace based on a block?
in thread Perl RE; how to capture, and replace based on a block?

Sorry. I just

cat ./FILE.html | perl {...}
in an open xterm. After several failures, and no more ideas. I closed the xterm, and asked for help. I didn't think it'd be of any use in the request.

I've since read every single reference in the Perl documentation, and while I think I've got the RE part down. I'm quite sure I don't know how to feed Perl the file properly to do any more than eat a single line at a time.

So let me have another go at it. The following

#!/usr/bin/perl -w # my feeble attempt to a multi-line RE in Perl $regexp = shift; while (<>) { print if /$regexp/; }
won't work as
# ./ \</\div\>\n\<\/body\> ./FILE.html
because shift will only manage input one line at a time. Attempts to figure how to make use of psed, and s2p, have failed miserably.

Apologies for the previous noise, and thank you for the thoughtful responses.


Yes. What say about me, is true.

Replies are listed 'Best First'.
Re^3: Perl RE; how to capture, and replace based on a block?
by hdb (Prior) on Dec 18, 2013 at 07:29 UTC

    Hi Chris, specifying a regex on the command line seems a difficult thing to do. At least you should be printing your $regexp to see what it contains.

    In any case, this code seems to work:

    my $str = " </div> </body> "; print "Success\n" if $str =~ /\<\/div\>\n\<\/body\>/;

    which suggests that if you slurp in your whole file as a single string (e.g. by unsetting $/), your regex should do its job.

    local $/; my $str = <>; print "Success\n" if $str =~ /\<\/div\>\n\<\/body\>/;
      Perl said; Success.

      Thanks a million, hdb! Your suggestion has helped me greatly in putting the last piece in my current "puzzle".

      Thanks again. I'd like to buy a round of +'s, for the house.


      UPDATE; I forgot to mention. The reason I was feeding the file to Perl is
      1) That's what worked best for me with sed.
      2) It seemed the easiest way to experiment getting a correct match with Perl.
      Yes. What say about me, is true.
Re^3: Perl RE; how to capture, and replace based on a block?
by QM (Parson) on Dec 19, 2013 at 09:41 UTC
    For fiddling with little bits of code, just use the debugger straight away:
    swedish_chef> perl -demo Loading DB routines from version 1.32 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. main::(-e:1): mo DB<1> $string = "one two three four" DB<2> x $string =~ m/(\w+)/g 0 'one' 1 'two' 2 'three' 3 'four'

    Note that "my" variables don't work as expected, I think they get created in the Debug scope, and not in the interpreted scope. But otherwise, have fun in the sandbox.

    Quantum Mechanics: The dreams stuff is made of

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1067594]
[erix]: karlgoethebier (/me catching up with the CB) we'll assume it must be a Rusty Dan ;-)

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (8)
As of 2017-03-25 09:50 GMT
Find Nodes?
    Voting Booth?
    Should Pluto Get Its Planethood Back?

    Results (311 votes). Check out past polls.