A versão antiga de 2 argumentos de open
(ou seja, open FILEHANDLE,EXPR
) para abrir um arquivo em perl está obsoleta. Por motivos de segurança, deve ser substituído pela versão de 3 argumentos open FILEHANDLE,MODE,EXPR
. Porém, há um caso em que a versão com 3 argumentos se comporta de maneira diferente da versão com 2 argumentos:
2-arg open
interpreta o nome do arquivo especial -
como entrada padrão. Por exemplo, ambos
echo foo | perl -e 'open my $fh, "-"; $_ = <$fh>; print $_;'
e
echo foo | perl -e 'open my $fh, "<-"; $_ = <$fh>; print $_;'
produzir a saída foo
. Na versão de 3 argumentos, a interpretação especial de -
desapareceu, entretanto:
echo foo | perl -e 'open my $fh, "<", "-"; $_ = <$fh>; print $_;'
não imprime nada.
Qual é a maneira padrão ou recomendada de emular esse recurso de 2-arg open
usando 3-arg open
? (Na aplicação concreta, o nome do arquivo é um argumento do programa que pode ou não ser -
.)
Para obter o formato de 3 argumentos equivalente a esses atalhos de 2 argumentos, consulte a seção sobre duplicação de identificadores de arquivo em
perldoc -f open
:Observe que esse
-
é um nome de arquivo tão válido quanto qualquer outro, um dos motivos para evitar a forma de 2 argumentos deopen
.Se você deseja que seu programa seja tratado
-
como stdin quando aberto para leitura (euname|
para significar o arquivo chamadouname|
, não a saída deuname
e os outros casos especiais perigosos suportados pela forma de 2 argumentos deopen
), você deseja fazer isso por mão: