/ / Ako vložiť 'perl -pne' funkčnosť do skriptu perl - perl

Ako dať funkciu perl -pne v perlovom skripte - perl

Takže na príkazovom riadku môžem pohodlne urobiť niečo také:

perl -pne "s/from/to/" in > out

A ak to potrebujem zopakovať a / alebo mám niekoľko ďalších perl -pne transformácie, môžem ich uviesť, povedzme, a .bat súbor v systéme Windows. To je samozrejme skôr okružný spôsob, ako to urobiť perl skript, ktorý obsahuje všetky tie regexové transformácie.

Ako to píšete? Ak mám shell skript obsahujúci tieto riadky:

perl -pne "s/from1/to1/" in > temp
perl -pne "s/from2/to2/" -i temp
perl -pne "s/from3/to3/" -i temp
perl -pne "s/from4/to4/" -i temp
perl -pne "s/from5/to5/" temp > out

Ako ich môžem dať všetky do jedného perl script?

odpovede:

10 pre odpoveď č. 1

-e prijíma ľubovoľný komplexný program. Pripojte sa teda k substitučným operáciám.

perl -pe "s/from1/to1/; s/from2/to2/; s/from3/to3/; s/from4/to4/; s/from5/to5/" in > out

Ak skutočne chcete program Perl, ktorý explicitne spracováva vstupy a slučky, odložte jednoplášťovú kartu, aby ste videli vygenerovaný kód a pracovali odtiaľto.

> perl -MO=Deparse -pe "s/from1/to1/; s/from2/to2/; s/from3/to3/; s/from4/to4/; s/from5/to5/"
LINE: while (defined($_ = <ARGV>)) {
s/from1/to1/;
s/from2/to2/;
s/from3/to3/;
s/from4/to4/;
s/from5/to5/;
}
continue {
print $_;
}
-e syntax OK

6 pre odpoveď č. 2

Súvisiaca odpoveď na otázku, ktorú ste nenašli celkom opýtaj sa: perl špeciálna premenná $^I, používa sa spolu s @ARGV, poskytuje editáciu na mieste -i, Rovnako ako v prípade voľby -p, Deparse zobrazí vygenerovaný kód:

perl -MO=Deparse -pi.bak -le "s/foo/bar/"
BEGIN { $^I = ".bak"; }
BEGIN { $/ = "n"; $ = "n"; }
LINE: while (defined($_ = <ARGV>)) {
chomp $_;
s/foo/bar/;
}
continue {
print $_;
}