Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re: Bug in script, regex help req extreme urgent

by Don Coyote (Monk)
on Mar 09, 2013 at 10:45 UTC ( #1022554=note: print w/ replies, xml ) Need Help??


in reply to Bug in script, regex help req extreme urgent

Use a look-behind assertion. Rather than looking for the string 'module ' then testing if the $ARGV[2] string follows, look for the $ARGV[2] string and see if it is preceded by the string 'module '.

my $match = "(?<=module )$ARGV[2]"

Using Look-ahead and Look-behind


Comment on Re: Bug in script, regex help req extreme urgent
Select or Download Code
Re^2: Bug in script, regex help req extreme urgent
by sid.verycool (Novice) on Mar 09, 2013 at 12:57 UTC
    If i do
    my $match = "(?<=module ).*?$ARGV[2].*?([\\(;])";
    Then the output is
    //Verilog HDL for "tt", "hh" "functional" // if i write the word module module NEW(Y, A, B ); output Y; input A; input B; endmodule
    this does not solve the issue :(
Re^2: Bug in script, regex help req extreme urgent
by sid.verycool (Novice) on Mar 09, 2013 at 13:43 UTC
    tHANKS Don Coyote, actually i tried what i suggested again... and fortunately its doing what i want, but i dont have any idea how its doing its job, specially the substitution part? we say it to replace $string with ARGV1$1.
    my $match = "(?<=module )$ARGV[2].*?([\\(;])"; print "$match"; my $filename = $ARGV[0]; open (INFILE, "<", $filename) or die "Failed to read file $filename +: $! \n"; $string = <INFILE>; close INFILE; $string =~ s/$match/$ARGV[1]$1/sg; print "$1";
    The output is just what i want i.e.
    script.pl f5 NEW OLD (?<=module )OLD.*?([\(;]) #> cat f5 //Verilog HDL for "tt", "hh" "functional" // if i write the word module here the script goofs up `timescale 1ps/10fs module NEW(Y, A, B ); output Y; input A; input B; endmodule
    please help me in understanding this
      Its solves my issue but fails in the scenario when i have  module this is in between OLD(A, B, Y); , i even want my script to change it to,   module this is in between NEW(A, B, Y); hence i tried doing this  (?<=module .*)$ARGV[2].*?([\\(;])"; which doesnt work and shell says <bold>Variable length lookbehind not implemented in regex; marked by <-- HERE in m/(?<=module .*)NEW.*?(\(;) <-- HERE / at script.pl line 23.</bold>. How can i implement this?

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1022554]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (8)
As of 2014-12-28 15:57 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (182 votes), past polls