Oh querida, não. O que você está fazendo com os backticks é gerar um shell apenas para imprimir algo em um arquivo. Como você percebe, caracteres especiais causam problemas, e permitem a injeção de comandos . Em teoria, você poderia escapar de tudo que o shell considera especial, mas isso é chato de fazer.
Use apenas as funções adequadas de manipulação de arquivos e faça uma função para conter todas as etapas:
sub dumptofile($@) {
my $file = shift;
if (open F, ">", $file) {
print F @_;
close F;
} else {
warn "Can't open $file: $!"
}
}
dumptofile("/tmp/curl", "some output\n");
Agora, se você não quiser digitar tudo isso, pode condensá-lo em algo mais feio, ignorando a verificação de erros e tudo (como na minha primeira versão). Ou salve a versão completa em um módulo e coloque-a em algum lugar no caminho de inclusão do seu Perl ( veja perl -I
).
# Dumptofile.pm
package Dumptofile;
use strict;
use warnings;
use Exporter qw/import/;
our @EXPORT = qw/dumptofile/;
sub dumptofile($@) {
my $file = shift;
if (open my $fh, ">", $file) {
print $fh @_;
close $fh;
} else {
warn "Can't open $file: $!"
}
}
1;
use:
perl -MDumptofile -e 'dumptofile("out.txt", "blahblah");