Почему эта замена, включающая конец каждой строки, добавляет больше к началу строки? - PullRequest
0 голосов
/ 31 января 2011

У меня есть документ, в который я хочу добавить что-то в начале и в конце каждой строки. Оригинальный документ выглядит так:

firstLine
secondline

Я хочу превратить это в:

put 'firstLine';
put 'secondline';

Используя следующий скрипт на Perl, я могу превратить его только в это:

put 'firstLine';
';put 'secondline';

Кажется, что есть $ в конце первой строки и в начале второй строки. Может ли кто-нибудь помочь мне понять, что не так со следующим скриптом Perl?

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;
    }
}

Ответы [ 2 ]

8 голосов
/ 31 января 2011

вообще не используйте регулярные выражения: у вас уже есть строки, разделенные в массиве @lines:

for ( @lines ) {
    chomp; # remove newline at the end of the implicit variable $_
    print "puts '$_'\n";
}
1 голос
/ 31 января 2011

Если вы сделаете это за один шаг, вам повезет больше. Что-то вроде:

s/^(&.+)$/put '$1';/im;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...