Perl usa uma variável chamada tipo de identificador de arquivo para manipular arquivos.
Ler ou gravar dados de um arquivo requer um identificador de arquivo.
Um identificador de arquivo é o nome de uma conexão de E/S.
Perl fornece três identificadores de arquivo: STDIN, STDOUT e STDERR, que representam entrada padrão, saída padrão e saída de erro padrão, respectivamente.
Você pode abrir arquivos em Perl usando os seguintes métodos:
abra FILEHANDLE, EXPRopen FILEHANDLEsysopen FILEHANDLE, FILENAME, MODE, PERMSsysopen FILEHANDLE, FILENAME, MODE
Descrição do parâmetro:
FILEHANDLE: Identificador de arquivo, usado para armazenar um identificador de arquivo exclusivo.
EXPR: Uma expressão composta pelo nome do arquivo e pelo tipo de acesso ao arquivo.
MODO: tipo de acesso ao arquivo.
PERMS: bits de permissão de acesso (bits de permissão).
No código a seguir, usamos a função open para abrir o arquivo file.txt em modo somente leitura (<):
open(DADOS, "<arquivo.txt");
< indica modo somente leitura.
DADOS no código é o identificador de arquivo usado para ler o arquivo. O exemplo a seguir abrirá o arquivo e gerará o conteúdo do arquivo:
O código a seguir abre o arquivo file.txt para escrita ( > ):
open(DATA, ">file.txt") ou die "arquivo file.txt não pode ser aberto, $!";
> Indica o método de escrita.
Se precisar abrir o arquivo para leitura e escrita, você pode adicionar um sinal + antes do caractere > ou <:
open(DATA, "+<file.txt"); ou die "arquivo file.txt não pode ser aberto, $!";
Este método não excluirá o conteúdo original do arquivo. Se você quiser excluí-lo, o formato é o seguinte:
open DATA, "+>file.txt" ou die "arquivo file.txt não pode ser aberto, $!";
Se quiser anexar dados a um arquivo, você só precisa abrir o arquivo no modo anexar antes de anexar os dados:
open(DATA,">>file.txt") || die "arquivo file.txt não pode ser aberto, $!";
>> significa anexar dados ao final do arquivo existente. Se precisar ler o conteúdo do arquivo a ser anexado, você pode adicionar o sinal +:
open(DATA,"+>>file.txt") || die "arquivo file.txt não pode ser aberto, $!";
A tabela a seguir lista os diferentes modos de acesso:
modelo | descrever |
---|---|
< ou r | Abra no modo somente leitura e aponte o ponteiro do arquivo para o cabeçalho do arquivo. |
> ou w | Abra no modo de escrita, aponte o ponteiro do arquivo para o cabeçalho do arquivo e trunque o tamanho do arquivo para zero. Se o arquivo não existir, tente criá-lo. |
>> ou um | Abra no modo de escrita e aponte o ponteiro do arquivo para o final do arquivo. Se o arquivo não existir, tente criá-lo. |
+< ou r+ | Abra no modo leitura-gravação e aponte o ponteiro do arquivo para o cabeçalho do arquivo. |
+> ou c+ | Abra no modo leitura-gravação, aponte o ponteiro do arquivo para o cabeçalho do arquivo e trunque o tamanho do arquivo para zero. Se o arquivo não existir, tente criá-lo. |
+>> ou um+ | Abra no modo leitura-gravação e aponte o ponteiro do arquivo para o final do arquivo. Se o arquivo não existir, tente criá-lo. |
A função sysopen é semelhante à função open, exceto que seus formatos de parâmetros são diferentes.
O exemplo a seguir abre um arquivo para leitura e gravação (+<nome do arquivo):
sysopen(DADOS, "arquivo.txt", O_RDWR);
Se você precisar limpar o arquivo antes de atualizá-lo, o método de gravação é o seguinte:
sysopen(DADOS, "arquivo.txt", O_RDWR|O_TRUNC );
Você pode usar O_CREAT para criar um novo arquivo, O_WRONLY é o modo somente gravação, O_RDONLY é o modo somente leitura.
O parâmetro PERMS é um valor de atributo octal, indicando as permissões após a criação do arquivo. O padrão é 0x666 .
A tabela a seguir lista possíveis valores de modo:
modelo | descrever |
---|---|
O_RDWR | Abra no modo leitura-gravação e aponte o ponteiro do arquivo para o cabeçalho do arquivo. |
O_RDONLY | Abra no modo somente leitura e aponte o ponteiro do arquivo para o cabeçalho do arquivo. |
O_WRONLY | Abra no modo de escrita, aponte o ponteiro do arquivo para o cabeçalho do arquivo e trunque o tamanho do arquivo para zero. Se o arquivo não existir, tente criá-lo. |
O_CREAT | Criar arquivo |
O_APPEND | anexar arquivo |
O_TRUNC | Truncar o tamanho do arquivo para zero |
O_EXCL | Se o arquivo existir ao usar O_CREAT, uma mensagem de erro será retornada. Ele pode testar se o arquivo existe. |
O_NONBLOCK | A E/S sem bloqueio permite que nossa operação seja bem-sucedida ou retorne um erro imediatamente sem ser bloqueada. |
Depois que o arquivo for usado, ele deverá ser fechado para atualizar os buffers de entrada e saída associados ao identificador do arquivo. A sintaxe para fechar o arquivo é a seguinte:
fecharFILEHANDLEfechar
FILEHANDLE é o identificador de arquivo especificado e retorna verdadeiro se for fechado com sucesso.
close(DATA) || morre "Não é possível fechar o arquivo";
Existem várias maneiras diferentes de ler e gravar informações em arquivos:
O principal método de leitura de informações de um identificador de arquivo aberto é o operador <FILEHANDLE>. Em um contexto escalar, ele retorna uma única linha do identificador de arquivo. Por exemplo:
Quando usamos o operador <FILEHANDLE>, ele retornará uma lista de cada linha no identificador do arquivo, por exemplo, podemos importar todas as linhas para um array.
Implemente a criação do arquivo import.txt com o seguinte conteúdo:
$ gato importação.txt 123
Leia import.txt e coloque cada linha no array @lines:
Executando o programa acima, o resultado de saída é:
123
A função xgetc retorna um único caractere do FILEHANDLE especificado ou STDIN se não for especificado:
getcFILEHANDLEgetc
Se ocorrer um erro ou se o identificador do arquivo estiver no final do arquivo, undef será retornado.
A função read é usada para ler informações do identificador de arquivo do buffer.
Esta função é usada para ler dados binários de um arquivo.
leia FILEHANDLE, SCALAR, LENGTH, OFFSET leia FILEHANDLE, SCALAR, LENGTH
Descrição do parâmetro:
FILEHANDLE: Identificador de arquivo, usado para armazenar um identificador de arquivo exclusivo.
SCALAR: Armazena o resultado Se OFFSET não for especificado, os dados serão colocados no início de SCALAR. Caso contrário, os dados serão colocados após o byte OFFSET em SCALAR.
COMPRIMENTO: O comprimento do conteúdo lido.
DESLOCAMENTO: deslocamento.
Retorna o número de bytes lidos se a leitura for bem-sucedida, 0 se o final do arquivo for atingido e undef se ocorrer um erro.
Para todas as funções que leem informações de identificadores de arquivo, a principal função de escrita no backend é print:
imprimir LISTA DE ARQUIVOSimprimir LISTAimprimir
Os resultados da execução do programa podem ser enviados para o dispositivo de saída (STDOUT: saída padrão) usando o identificador de arquivo e a função de impressão, por exemplo:
imprimir "Olá, Mundo!n";
No exemplo a seguir, abriremos um arquivo existente file1.txt, leremos cada linha dele e gravaremos no arquivo file2.txt:
No exemplo a seguir, renomeamos o arquivo existente file1.txt para file2.txt, e o diretório especificado está em /usr/codercto/test/:
#!/usr/bin/perlrename ("/usr/codercto/test/file1.txt", "/usr/codercto/test/file2.txt" );
A função renomeia aceita apenas dois parâmetros e renomeia apenas os arquivos existentes.
O exemplo a seguir demonstra como usar a função unlink para excluir arquivos:
Você pode obter a localização de um arquivo usando a função Tell e especificar a localização dentro do arquivo usando a função search :
A função Tell é usada para obter a localização do arquivo:
diga ao FILEHANDLEtell
Se FILEHANDLE for especificado, esta função retornará a posição do ponteiro do arquivo, em bytes. Se não for especificado, retorna o identificador de arquivo selecionado padrão.
A função seek() lê ou grava arquivos movendo o ponteiro de leitura e gravação do arquivo através do identificador de arquivo e lê e grava em bytes:
procure FILEHANDLE, POSIÇÃO, ONDE
Descrição do parâmetro:
FILEHANDLE: Identificador de arquivo, usado para armazenar um identificador de arquivo exclusivo.
POSIÇÃO: Indica a quantidade de bytes a serem movidos pelo identificador do arquivo (ponteiro de posição de leitura e gravação).
WHENCE: Indica a posição inicial quando o identificador do arquivo (ponteiro de posição de leitura e gravação) começa a se mover. Os valores possíveis são 0, 1 e 2 indicando o início do arquivo, a posição atual e o final do arquivo. arquivo respectivamente.
O exemplo a seguir lê 256 bytes desde o início do arquivo:
procure DADOS, 256, 0;
As operações de arquivo do Perl também podem primeiro testar se o arquivo existe, se pode ser lido e gravado, etc.
Podemos primeiro criar o arquivo file1.txt, da seguinte forma:
$ cat arquivo1.txt www.codercto.com
Executando o programa acima, o resultado de saída é:
Informações do arquivo1.txt: é um arquivo de texto, 15 bytes
Os operadores de teste de arquivo são mostrados na tabela a seguir:
Operador | descrever |
---|---|
-UM | A hora em que o arquivo foi acessado pela última vez (unidade: dias) |
-B | É um arquivo binário? |
-C | Tempo de modificação do nó de índice do arquivo (inode) (unidade: dias) |
-M | A hora em que o arquivo foi modificado pela última vez (unidade: dias) |
-O | O arquivo pertence ao UID real |
-R | Arquivos ou diretórios podem ser lidos por UID/GID real |
-S | Para soquete (soquete) |
-T | É um arquivo de texto? |
-C | Arquivos ou diretórios podem ser gravados com UID/GID real |
-X | Arquivos ou diretórios podem ser executados com UID/GID real |
-b | Para arquivos especiais de bloco (bloco especial) (como discos montados) |
-c | Para arquivos com caracteres especiais (caracteres especiais) (como dispositivos de E/S) |
-d | para diretório |
-e | O nome do arquivo ou diretório existe |
-f | para arquivos comuns |
-g | Arquivo ou diretório possui o atributo setgid |
-k | O arquivo ou diretório tem o sticky bit definido |
-eu | para links simbólicos |
-o | O arquivo pertence a um UID válido |
-p | O arquivo é um pipe nomeado (FIFO) |
-r | O arquivo pode ser lido com UID/GID válido |
-s | O arquivo ou diretório existe e não é 0 (retorna o número de bytes) |
-t | O identificador do arquivo é TTY (resultado de retorno da função do sistema isatty(); este teste não pode ser usado para nomes de arquivos) |
-você | Arquivo ou diretório possui atributo setuid |
-c | Os arquivos podem ser gravados com UID/GID válido |
-x | O arquivo pode ser executado com UID/GID válido |
-z | O arquivo existe e o tamanho é 0 (o diretório é sempre falso), ou seja, se é um arquivo vazio. |