Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Perl > Perl Misc > using regexes as command line parameters

Reply
Thread Tools

using regexes as command line parameters

 
 
JMI
Guest
Posts: n/a
 
      11-18-2004
Hello

Short question, but maybe somebody knows how-to

Let's imagine your program accepts two command line arguments to perform
replaces in a string:
usage: myprogram -s "foo" -r "bar"
where s is the search regex and r the replace regex.

Everything works fine, even grouping with parenthesis, etc. As described in
detail in the cookbook.

But:
When I want to use a captured value in the replacement regex, it does
simply not work. Using all possible syntaxes ( as \$1, or \\$1...) only
leads to either an exmpty value in the replaced string, or a plain-text
"$1" text when too much is escaped.

The code looks like:

my $rx;
if ($case_sensitive) {
$rx = qr/$search_pattern/;
} else {
$rx = qr/$search_pattern/i;
}
print "Patching file:\t$origin\n" if ($debug_mode ||
$verbose_mode);
my $myfile = '';

print "Opening $origin\n" if $debug_mode;
open(OLD, "< $origin")
while (<OLD>) {
$myfile .= $_;
}
print "Closing $origin\n" if $debug_mode;
close(OLD)

open(NEW, "> $playground")
print "Replacing $search_pattern with $replace_pattern\n" if
$debug_mode;
$myfile =~ s/$rx/$replace_pattern/gs;
print NEW $myfile
close(NEW)

Hope it's the right place to find some people having had the same
problem,....

thanks and best regards
JM
 
Reply With Quote
 
 
 
 
Paul Lalli
Guest
Posts: n/a
 
      11-18-2004
"JMI" <waggis_at_hotmail.com> wrote in message
news:Xns95A5B40F63810waggishotmailcom@192.37.1.74. ..
> Let's imagine your program accepts two command line arguments to

perform
> replaces in a string:
> usage: myprogram -s "foo" -r "bar"
> where s is the search regex and r the replace regex.
>
> Everything works fine, even grouping with parenthesis, etc. As

described in
> detail in the cookbook.
>
> But:
> When I want to use a captured value in the replacement regex, it does
> simply not work. Using all possible syntaxes ( as \$1, or \\$1...)

only
> leads to either an exmpty value in the replaced string, or a

plain-text
> "$1" text when too much is escaped.


Giving simply $1 makes the shell pass the shell's own $1 variable to
your script.
Giving \$1 passes the literal string '$1' to your script.

What you need to do is tell Perl to evaluate that literal string as
Perl:

perl -le'$_ = q/foo/; s/($ARGV[0])/$ARGV[1]/ee; print;' foo \$1

This is a trivial example, of course, but it does illustrate that perl
is correctly replacing 'foo' with the captured match (which also happens
to be 'foo').

For more info, look up the /e modifier in
perldoc perlretut
or
perldoc perlre

Paul Lalli

 
Reply With Quote
 
 
 
 
JMI
Guest
Posts: n/a
 
      11-22-2004
Worked ! Thanks a lot ))


"Paul Lalli" <(E-Mail Removed)> wrote in
news:2Q4nd.12483$wY2.3433@trndny05:

> "JMI" <waggis_at_hotmail.com> wrote in message
> news:Xns95A5B40F63810waggishotmailcom@192.37.1.74. ..
>> Let's imagine your program accepts two command line arguments to

> perform
>> replaces in a string:
>> usage: myprogram -s "foo" -r "bar"
>> where s is the search regex and r the replace regex.
>>
>> Everything works fine, even grouping with parenthesis, etc. As

> described in
>> detail in the cookbook.
>>
>> But:
>> When I want to use a captured value in the replacement regex, it does
>> simply not work. Using all possible syntaxes ( as \$1, or \\$1...)

> only
>> leads to either an exmpty value in the replaced string, or a

> plain-text
>> "$1" text when too much is escaped.

>
> Giving simply $1 makes the shell pass the shell's own $1 variable to
> your script.
> Giving \$1 passes the literal string '$1' to your script.
>
> What you need to do is tell Perl to evaluate that literal string as
> Perl:
>
> perl -le'$_ = q/foo/; s/($ARGV[0])/$ARGV[1]/ee; print;' foo \$1
>
> This is a trivial example, of course, but it does illustrate that perl
> is correctly replacing 'foo' with the captured match (which also happens
> to be 'foo').
>
> For more info, look up the /e modifier in
> perldoc perlretut
> or
> perldoc perlre
>
> Paul Lalli
>


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Using regexes versus "in" membership test? Victor Hooi Python 6 12-13-2012 06:38 AM
Regexes on the command line Roedy Green Java 12 03-02-2009 01:02 AM
Parsing HTML using regexes and arrays. soldier.coder Ruby 1 11-07-2008 10:33 PM
Problem extracting data from clipboard using java regexes spam.eggs.bacon@gmail.com Java 0 09-29-2006 08:17 AM
Servlet parameters different from the command line parameters? Jonck van der Kogel Java 2 05-26-2004 11:34 PM



Advertisments