Adriano Allora am Montag, 2. Januar 2006 12.48:
> hi to all,
> a friend of mine ask me for a perl script to change regexp patterns in
> some texts (he can learn regexp, but I suppose he won't learn perl). So
> I start write this one to him.
> I have a problem:
> ==> with pattern = (dir)ectory and replacement = $1, why the script
> does not eval $1 as "dir"? how I can change the script to make it works
> as I want?

because there is no $1 at the point you test it. You get an $1 by putting '()' 
in a match/substitution.

btw: What would be the purpose of evaling it?

> #!/usr/bin/perl -w

add 
        use strict;

here and declare your variables with my (good style).

> $^I ='_old';
> print "pattern: ";

Single quotes are sufficient here and on several places below, since nothing 
is interpolated into the string.

> $pattern = <STDIN>;
> chomp($pattern);
> print "replacement: ";
> $replacement = <STDIN>;
> chomp($replacement);
> print "\n print \"s\" to confirm substitution; print \"n\" to avoid it
> print \"n\" \n\n";

The above print statements are a bit messy imho.
Maybe you also want to give out 'type' instead of 'print'.

> while(<>)
>       {
>       $choice = "";
>       if(/$pattern/gi)

the g modifier is not necessary here, because the if branch is executed on one 
or more occurences of $pattern.

>               eval $replacement if $replacement eq "$1";
>               print STDOUT "I'd subsitute this one => ". $_;
>               $choice = <STDIN>;
>               chomp($choice);
>               }
>        s/$pattern/$replacement/gi if $choice eq "s";
>       print;
>       }

The script behaves a bit strange by echoing most of the input.
You could make it more userfriendly by avoiding this and give out messages 
what to do at the appropriate places.


hth, joe

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to