Para todos os arquivos de entrada, adicione informações de direitos autorais se não houver informações de direitos autorais; caso contrário, não faça nada e faça backup do arquivo original com o final de .bak.
Para começar, uso o seguinte programa (certifique-se de fazer backup do arquivo de entrada antes de tentar):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Resultado: os arquivos originais e de backup estão todos em branco, o que é uma droga. (Lembre-se de fazer um backup ao testar o programa no futuro).
Analise os motivos:
Principalmente devido ao uso incorreto de $^I. Vamos dar uma olhada em como $^I funciona:
$^I tem como padrão undef, o que não afeta o programa. Se for atribuída uma string (como ".bak" no programa), o programa executará a operação de backup e adicionará a string ao final do nome do arquivo original para se tornar a extensão do nome do arquivo de backup. Ao usar o operador diamante para abrir um arquivo, a operação do perl é primeiro alterar o nome do arquivo aberto para um nome de arquivo com uma extensão, depois criar um novo arquivo com o nome do arquivo original e, em seguida, ler a linha de conteúdo do arquivo por linha no programa e após fazer algumas alterações, ele será salvo em um novo arquivo. Isso equivale a modificar o conteúdo do arquivo e fazer backup do arquivo antigo. Obviamente, se o valor for undef, não será feito backup dos arquivos antigos.
Porque $^I = ".bak"; é colocado na frente no programa acima, mas há duas operações de leitura de arquivo atrás dele. Supondo que o arquivo lido seja file.pl, o primeiro while(<>) altera o arquivo original para file.pl.bak. Em seguida, crie um novo arquivo vazio e nomeie-o como arquivo.pl; mas o novo arquivo só será gravado no disco quando o programa terminar, portanto, quando a segunda operação de leitura do arquivo while (<>) for realizada, o arquivo em branco.pl torna-se file.pl.bak, que cobre o primeiro arquivo de backup e, em seguida, cria um novo arquivo em branco file.pl. Neste momento, tanto o arquivo original quanto o arquivo de backup estão em branco.
Depois de entender como $^I funciona, o programa é fácil de modificar:
Basta colocar $^I = ".bak"; antes da última operação de leitura do arquivo while(<>), como segue:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|