Hvordan kan jeg gøre inplace redigering (-i) med perl på windows?

Indlæg af Hanne Mølgaard Plasc

Problem



I Unix/Linux-versionen ændrer jeg simpelthen den første linje:


#!perl -i.bak


Ved hjælp af Activestate perl på windows, hvor jeg har oprettet foreningen med .pl, kan jeg køre et perl script direkte fra kommandolinjen.


myScript.pl


Hvordan kan jeg indføre redigering af filer, hvis jeg stadig vil bruge standardforeningen?

Bedste reference


Det lyder som et trick spørgsmål, og jeg spekulerer på, om jeg forstår dig rigtigt.


perl -pi.bak myScript.pl myfiletochange


Bare ring perl, levere omskiftere og script navn, og væk fra dig.


Nu kan det være, at du ikke vil levere disse ekstra argumenter. Hvis ja, kan du simpelthen indstille variablen $^I, som aktiverer inplace edit. E.g.:[9]


$^I = ".bak"; # will set backup extension

Andre referencer 1


Da du skal bruge et script, vil du måske gerne gøre noget som dette:


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


hvis du vil oprette en sikkerhedskopi, skift derefter local $^I = ''; til local $^I = '.bak';