Em Perl, a maioria das minhas print
declarações assume a forma
print "hello." . "\n";
Existe uma boa maneira de evitar manter todos os "\ n" incômodos espalhados por aí?
Eu sei que poderia fazer uma nova função como a myprint
que adiciona automaticamente \ n, mas seria bom se eu pudesse substituir a existente print
.
perldoc perlvar
descreve a maioria das advertências, por que trabalhá-las aqui?Respostas:
Perl 6 tem a
say
função que adiciona automaticamente\n
.Você também pode usar
say
em Perl 5.10 ou 5.12 se adicionarpara o início do seu programa. Ou você pode usar Modern :: Perl para obter este e outros recursos.
Veja o recurso perldoc para mais detalhes.
fonte
use 5.012;
ouuse 5.010;
para obtê-lo se você estiver executando essas mais recentesperl
s.Você pode usar a
-l
opção no cabeçalho she-bang:Resultado:
fonte
perl
opções, incluindo o que-l
está fazendo, aqui .Se Perl 5.10+ não for uma opção, aqui está uma aproximação rápida e suja. Não é exatamente o mesmo, já que digamos que tem alguma mágica quando seu primeiro argumento é um identificador, mas para imprimir em STDOUT:
fonte
A maneira como você está escrevendo sua declaração de impressão é desnecessariamente prolixa. Não há necessidade de separar a nova linha em sua própria string. Isso é suficiente.
Essa constatação provavelmente tornará sua codificação mais fácil em geral.
Além de usar
use feature "say"
ouuse 5.10.0
ouuse Modern::Perl
para obter osay
recurso embutido , irei manipular o perl5i, que ativa muitos recursos sensíveis ausentes do Perl 5 por padrão.fonte
Talvez você queira alterar o separador de registro de saída para alimentação de linha com:
local $\ = "\n";
Atualização: minha resposta fala mais sobre capacidade do que sobre conveniência. Não considero que adicionar "\ n" no final das linhas seja uma tarefa "incômoda", mas se alguém realmente quiser evitá-los, esta é uma maneira. Se eu tivesse que manter um pouco de código que usa essa técnica, provavelmente o refatoraria imediatamente.
fonte
"helo\r\n"
que agora envia"helo\r\n\n"
.local $\ = "\n";
-l
é ótimo para linhas de comando (consulte perldoc.perl.org/perlrun.html#Command-Switches ). Eu não o recomendaria em nenhum programa maior.Aqui está o que encontrei em https://perldoc.perl.org/perlvar.html :
exemplo:
fonte
Em Perl 6 existe a
say
funçãofonte
Se você estiver preso ao pré-5.10, as soluções fornecidas acima não replicarão totalmente a
say
função. Por exemploNão funcionará com invocações como
ou
... porque a função acima não atua na função global implícita
$_
likeprint
e realsay
.Para replicar mais de perto o perl 5.10+
say
você quer esta funçãoQue agora age assim
O
say
integrado em perl6 se comporta de maneira um pouco diferente. Invocá-lo comsay @arr
ou@arr.say
não apenas concatenará os itens do array, mas os imprimirá separados pelo separador de lista. Para replicar isso em perl5 você faria isso$"
é a variável separadora de lista global ou, se você estiver usandoEnglish.pm
, é é$LIST_SEPARATOR
Agora vai agir mais como perl6,
fonte