Okay, I almost got it to work like this:
use strict;
use warnings;
my $echo = "ECHO";
my ($dffname, $listname) = @ARGV;
my $fh;
my $key=undef;
# read key/val lists
open $fh, '<', $dffname or die "$dffname $!";
my %lijst = map { chomp; (split /\t/)[1,0] } <$fh>;
close $fh;
foreach $key (sort keys %lijst) {
print "The value associated with key $key is $lijst{$key}\n";}
# readfile list
open $fh, '<', $listname or die "$listname $!";
my @listfiles = <$fh>; chomp @listfiles;
close $fh;
for my $file (@listfiles) {
# read original file
open $fh, '<', $file or die "$file $!";
local $/; my $content = <$fh>;
close $fh;
# modify content
while( my ($key, $val) = each %lijst ) {
next unless $val == 1;
$content =~ s/^$key$/$echo/gms;
$content =~ s/$echo/$key/;
}
# write modified file
open $fh, '>', "$file.out" or die "$file.out $!";
print $fh $content
}
BUT... in this piece of code:
$content =~ s/^$key$/$echo/gms;
$content =~ s/$echo/$key/;
the value of the second $key isn't the same as the value of the first $key. The goal of this piece is to first substitute every occurence of $key with $echo, and then to substitute only the first occurence of $echo with $key (thus returning it to it's original value). And that's not working. :(
Matje
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.