Perl на месте редактирует в рамках сценария

Почему Вы даже рассматриваете набег 10 или 5. Вы хотите производительность здесь. Вы не заботитесь, понижаются ли диски просто, так как это - кэш только.

Просто используйте набег 0 или разделите их. Я думаю отдельный, было бы лучше, так как сбой диска не удалит Ваш весь кэш.

3
задан 6 September 2009 в 20:32
4 ответа
do {
  local $^I='.bak'; # see perlvar(1)
  local @ARGV=("file");
  while(<>){
    s/<value>/<value>/ig;
    print;
  }
};

Остерегайтесь хотя: $^I как perl's -i не является отказоустойчивым.

6
ответ дан 3 December 2019 в 05:37
  • 1
    Это, кажется, танцует джайв с какой I' ve, замеченный на других сайтах для пути к оперативному редактированию. Я надеялся на что-то настолько же быстро и painfree, как острота кроме этого работает также. Много благодарит. –  Shawn Anderson 5 September 2009 в 01:40
  • 2
    aaarrrghhh. s/jive/jibe/-" jive" стиль музыки или танца. слово, которое Вы ищете, является " jibe" - " Насмехайтесь над \Jibe \, v. я. [...] 2. Согласиться; гармонировать. [Colloq]. - Bartlett.". извините, только одна из вещей, которые прослушивают меня как люди, произносящие эти два слова по буквам " lot" как одно слово " lot". –  cas 5 September 2009 в 05:06

Ваше редактирование кажется довольно простым. Вы рассмотрели просто использование sed с-i опцией?

0
ответ дан 3 December 2019 в 05:37
  • 1
    I' ve, который не рассматривают им. I' ve никогда не использовал sed прежде в рамках сценария жемчуга. I' d предпочитают делать это с помощью жемчуга, если это возможно. Я предполагаю, что мог обратная галочка жемчуг-p-e оператор в сценарии также, но it' s довольно ужасный. Спасибо за мысль, все же. –  Shawn Anderson 4 September 2009 в 22:38

Попробуйте это, на основе перевода -i в perldoc perlrun:

use strict;
use warnings;
my $filename = "something";
my $extension = '.orig';
while (<>) {
    my $backup;
    if ($extension !~ /\*/) {
        $backup = $filename . $extension;
    }
    else {
        ($backup = $extension) =~ s/\*/$filename/g;
    }
    rename $filename, $backup;
    open my $outfile, '>', $filename;
    select $outfile;
    s/^\#+// if /value/; 
}
continue {
    print;  # this prints to original filename
}
select STDOUT;
0
ответ дан 3 December 2019 в 05:37
  • 1
    Серьезно слишком много работы, учитывая, что $^I точный эквивалент для командной строки -i. –  Randal Schwartz 29 October 2009 в 03:03

используйте File::Inplace

Кроме того, это имеет фиксацию/откат после того, как у Вас будут все свои изменения на месте для файла....

0
ответ дан 3 December 2019 в 05:37

Теги

Похожие вопросы