On Tue, Apr 29, 2008 at 6:06 PM, melody <[EMAIL PROTECTED]> wrote: snip > #!/usr/bin/perl > use warnings; > use strict; snip
Good, keep this up snip > my @array; > my @replacearray; snip Try to declare your variables where you initialize them. snip > open FHR,'<',"repl.txt"; > open OUT,'>>',"output.txt"; > open IN,'<',"input.txt"; snip Good use of the three argument version of open, but you should be using lexical filehandles and checking for errors: open my $fhr, "<", "repl.txt" or die "could not open repl.txt: $!"; Also, it is customary to write Perl programs as filters, that is they work on data presented on STDIN or provided on the command line* and print their results to STDOUT (with errors going to STDERR). This makes the program very flexible and cuts out a lot of file opening code. snip > @replacearray=<FHR>; > @array=<IN>; > for my $i(0..$#array) snip Unless you are certain that your files are small this is an incredibly bad idea. Use a while loop instead. Also, don't use subscripts when you can use the iterator version of for: for my $value (@array) { #changes to $value also occur to $array[current position] through the magic of aliasing } > { > $array[$i]=~s/to be replaced/$replacearray[0]/gi; > push @replacearray, shift @replacearray; > } > my @result=grep(/[^\$]/,@array); > print OUT @result; > > > Can anyone point out to me what i am doing wrong??Thanks snip Off hand I would say that your problem is the newlines on both the replace and the input lines. You start with "Text| to be replaced\n" and "replace1\n" and perform a substitution that results in "Text| replace1\n\n". The solution is to chomp the replace lines as they are being read in: my @replace = map { chomp; $_ } <$fhr>; Here is my version of your code (note: <DATA> would be <> and you wouldn't use the string/filehandle trick, they are there to make the program self-contained for list purposes): #!/usr/bin/perl use strict; use warnings; my $replacefile = "replace1\nreplace2\nreplace3\n"; open my $fh, "<", \$replacefile or die "could not open the scalar \$replacefile as a file: $!"; my @replace = map { chomp; $_ } <$fh>; while (<DATA>) { s/to be replaced/$replace[0]/gi; print; push @replace, shift @replace; } __DATA__ Text| to be replaced Text| to be replaced Text| to be replaced Text| to be replaced Text| to be replaced * happily an empty <> exhibits this behavior (using STDIN if @ARGV is empty or auto-opening the files in @ARGV if they are present) -- Chas. Owens wonkden.net The most important skill a programmer can have is the ability to read. -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/