Ignorando por enquanto o fato de que perl
pode fazer melhor qualquer coisa que sed
possa fazer, aqui para citar a linha de comando shell para passar para system()
, o melhor seria usar o tipo de aspas q{...}
:
my $cmd = q{sed 's/...........//;s/............$//' a_file.txt >> a_newfile.txt};
(assumindo que a parte ...
não contenha% desequilibrada{
/ }
, se isso acontecer, você pode usar q@...@
, q[...]
, q(...)
...).
Como você deseja que um shell interprete essa linha de comando (para o redirecionamento >>
), você deseja que $cmd
seja escalar, não array (de qualquer maneira, as matrizes são nomeadas @cmd
, não $cmd
).
Para perl
executar o comando sed
sozinho, ou seja, sem invocar um shell, você faria:
my @cmd = ('sed', q{s/...........//;s/............$//}, 'a_file.txt');
system(@cmd);
Entretanto, você precisará fazer o redirecionamento de stdout em perl
de antemão. Como:
open STDOUT, '>>', 'a_newfile.txt' or die "open: $!"
Para fazer a coisa toda em perl:
open my $in, '<', 'a_file.txt' || die "open a_file: $!";
open my $out, '>>', 'a_newfile.txt' || die "open a_newfile: $!";
while (<$in>) {
s/...........//;s/............$//;
print $out $_;
}
close $in;
close $out;