Um filehandle é uma estrutura Perl interna que associa um arquivo físico a um nome. Todos os filehandles têm acesso de leitura / gravação, portanto, uma vez que o filehandle seja anexado a um arquivo, a leitura / gravação pode ser feita. No entanto, o modo no qual o identificador de arquivo é aberto deve ser especificado ao associar um identificador de arquivo.
 

Abrindo um arquivo

 
A função Abrir é usada para abrir um novo arquivo ou um arquivo existente.

Sintaxe: abrir FILEHANDLE, VAR

Aqui FILEHANDLE é o identificador retornado pela função abrir e VAR é a expressão com o nome do arquivo e o modo de abertura do arquivo.
A tabela abaixo mostra os modos nos quais o arquivo pode ser aberto e acesso a várias operações.

ModoDescrição
r ou <Acesso somente leitura
w ou>Cria, grava e trunca
a ou >>Grava, acrescenta e cria
r + ou + <Lê e escreve
w + ou +>Lê, escreve, cria e trunca
a + ou + >>Lê, escreve, acrescenta e cria


 

Lendo um arquivo

 
Depois que um FILEHANDLE é atribuído a um arquivo, várias operações como leitura, gravação e anexação podem ser feitas. Existem várias maneiras diferentes de ler um arquivo.

  • Usando um Operador de Manipulação de Arquivo
  • Usando a função getc
  • Usando a função de leitura
  • O Operador FileHandle
    O principal método de leitura das informações de um filehandle aberto é usando o operador <> . Quando o operador <> é usado em um contexto de lista, ele retorna uma lista de linhas do filehandle especificado. O exemplo abaixo lê uma linha do arquivo e a armazena no escalar.

    Deixe que o conteúdo do arquivo “GFG.txt” seja o seguinte:

    GeeksforGeeks
    Ola geek
    Geek uma revolução
    Geeks são os melhores
    

    Exemplo: GFG.pl




    # Opening the file 
    open(fh, "GFG.txt") or die "File '$filename' can't be opened";
      
    # Reading First line from the file
    $firstline = <fh>;
    print "$firstline\n";

    Saída :

  • Função getc
    A função getc retorna um único caractere do FILEHANDLE especificado ou STDIN se nenhum for especificado

    Sintaxe: getc FILEHANDLE




    # Opening the file 
    open(fh, "GFG.txt") or die "File '$filename' can't be opened";
       
    # Reading First char from the file
    $firstchar = getc(fh);
    print "$firstchar\n";

    Saída:



    Se houver um erro ou o identificador de arquivo estiver no final do arquivo, ele retornará undef.

  • Função de leitura
    A função de leitura é usada para ler dados binários de um arquivo usando filehandle.

    Sintaxe
    ler FILEHANDLE, SCALAR, LENGTH, OFFSET
    ler FILEHANDLE, SCALAR, LENGTH

    Aqui, LENGTH representa o comprimento dos dados a serem lidos e os dados são colocados no início de SCALAR se nenhum OFFSET for especificado. Caso contrário, os dados são colocados após os bytes de OFFSET em SCALAR. No sucesso da leitura do arquivo, a função retorna o número de bytes lidos, zero no final do arquivo ou undef se houver um erro.

     

    Lendo várias linhas de uma vez

     
    O exemplo mostrado abaixo lê o conteúdo do arquivo especificado por filehandle até atingir o final do arquivo (EOF).

    Exemplo: File.pl




    # Opening the file
    open(FH, "GFG.txt")or die "Sorry!! couldn't open";
    print "Reading file \n";
      
    # Reading the file till FH reaches EOF
    while(<FH>)
    {
        # Printing one line at a time
        print $_;
    }
    close;

    Saída :

     

    Tratamento de exceções em arquivos

     
    Existem duas maneiras pelas quais a exceção pode ser tratada

    • Lançar uma exceção se o arquivo não puder ser aberto
    • Dê um aviso se o arquivo não puder ser aberto e continue executando
    • Lance uma exceção
      Quando o filehandle não pode ser atribuído a um ponteiro de arquivo válido naquele momento, o dado é executado imprimindo a mensagem e mata o programa atual.
      Exemplo :




      # Initializing filename 
      $filename = 'GFG1.txt';
        
      # Prints an error and exits if file not found
      open(fh, '<', $filename) or die "Couldn't Open file $filename";

      Saída:

      O código acima imprime um erro se o arquivo não for encontrado e sai do código.

    • Dê um aviso
      Quando o filehandle não pode ser atribuído a um ponteiro de arquivo válido, ele apenas imprime uma mensagem de aviso usando a função warn e continua em execução.
      Exemplo :




      # Initializing filename
      $filename = 'GFG.txt';
      # Opening a file and reading content
      if(open(fh, '<', $filename))
      {
          while(<fh>)
          {
              print $_;
          }
      }
        
      # Executes if file not found
      else
      {
        warn "Couldn't Open a file $filename";
      }

      Saída: