Как я могу сделать редактирование на месте (-i) с Perl на окнах? - PullRequest
2 голосов
/ 28 марта 2012

В версии для Unix / Linux я просто изменил бы первую строку:

#!perl -i.bak

Используя Perl Activestate в Windows, где я создал ассоциацию с .pl, я могу запустить PerlСценарий прямо из командной строки.

myScript.pl

Как я могу редактировать файлы на месте, если я все еще хочу использовать связь по умолчанию?

Ответы [ 2 ]

5 голосов
/ 28 марта 2012

Звучит как вопрос с подвохом, и мне интересно, правильно ли я вас понимаю.

perl -pi.bak myScript.pl myfiletochange

Просто вызовите Perl, укажите ключи и имя сценария, и все готово.

Теперь, возможно, вы не хотите предоставлять эти дополнительные аргументы. Если это так, вы можете просто установить переменную $^I, которая активирует редактирование на месте. E.g.:

$^I = ".bak"; # will set backup extension
0 голосов
/ 14 января 2013

Поскольку вы собираетесь использовать сценарий, вы можете сделать что-то вроде этого:

sub edit_in_place
{
    my $file       = shift;
    my $code       = shift;
    {
        local @ARGV = ($file);
        local $^I   = '';
        while (<>) {
            &$code;
        }
    }
}

edit_in_place $file, sub {
    s/search/replace/;
    print;
};

, если вы хотите создать резервную копию, измените local $^I = ''; на local $^I = '.bak';

...