I posted here a while back about how to set the parameters of an
  s/// type of action, inside a script from the cmdline.

Paul posted a simple script in answer that does exactly that.
and even allows any modifier to be set from cmdline.
(Slightly modified for clarity)

cat example1.pl
  #!/usr/bin/perl -wp
  BEGIN { our($regex,$repl,$mod) = (shift,shift,shift||'') }
  eval "s/$regex/$repl/$mod";

Results:
  echo something|./example1.pl '(some)(.*$)' '$1one'
  someone

Paul explained in brief how and why this works but I'm having trouble
integrating this into a more complex script, can't seem to find the
error of my attempts.

The script is awfully contrived but the idea is to get this to work
in a script employing Getopts::Std or other complications.

In the example below the input is expected to come from files so I
dropped the -p part.

In this contrived  case the input file contains only the one line

  something

I know my script is wrong but have tried a number of variations.  All
failed.  Its apparent I'm lacking some basic knowledge about eval here.

With a command line like:
 ./example2.pl  -s '(some)(.*$)' '$1one'

cat example2.pl

 #!/usr/local/bin/perl -w

 $file = "./input";

 use vars qw($opt_s);
 use Getopt::Std;
 my $optstr ="s:";
 getopts($optstr); 

 if ($opt_s) {
   $regex = $opt_s;
   BEGIN { 
    our ($repl,$mod) = (shift,shift||'')
   }
 }

open(FILE,"<$file") or die;
# NOW how to use eval here
while(<FILE>){
    chomp;
# how can I make these variables be seen as a legitimate piece
# of perl code?  And print the result
# eval $_ =~ s/$regex/$repl/$mod;
# print...
} 


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to