开发者

Why is this substitution involving the end of each line adding more to the beginning of the line?

开发者 https://www.devze.com 2023-02-07 13:58 出处:网络
I have some document into which I want to add something at the beginning and at the end of each line. The original document looks like this:

I have some document into which I want to add something at the beginning and at the end of each line. The original document looks like this:

firstLine
secondline

I want to turn it into this:

put 'firstLine';
put 'secondline';

By using the following Perl script, I can only turn it into this:

put 'f开发者_StackOverflow社区irstLine';
';put 'secondline';

It seems that there is a $ at the end of the first line and at the beginning of the second line. Could someone help me to figure out what is wrong with the following Perl script?

use File::Find;
use strict;

my ($filename, @lines, $oldterm, $newterm);    #,$File::Find::name);
my $dir = ".";

open MYFILE, ">error.txt" or die $!;
find(\&edits, $dir);

sub edits() {
    $filename = $File::Find::name;
    if (grep(/\.txt$/, $filename)) {           #only process the perl files

        # open the file and read data
        # die with grace if it fails
        open(FILE, "<$filename") or die "Can't open $filename: $!\n";
        @lines = <FILE>;
        close FILE;

        # open same file for writing, reusing STDOUT
        open(STDOUT, ">$filename") or die "Can't open $filename: $!\n";

        # walk through lines, putting into $_, and substitute 2nd away
        for (@lines) {
            s/(&.+)/' "$1" '/ig;
            s/^/put '/ig;
            s/$/';/ig;
            print;
        }

        #Finish up
        close STDOUT;
    }
}


don't use regular expressions at all: you already have the lines separated in the @lines array:

for ( @lines ) {
    chomp; # remove newline at the end of the implicit variable $_
    print "puts '$_'\n";
}


If you do it in one step you should have better luck. Something like:

s/^(&.+)$/put '$1';/im;
0

精彩评论

暂无评论...
验证码 换一张
取 消