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;