por favor explique while loop no código PERL?

0

Este é um código para encontrar palavras, caracteres e linhas em um arquivo. Alguém pode explicar o loop while?

open(FILE, "<data.txt") or die "Could not open file: $!";

my ($lines, $words, $chars) = (0,0,0);

while (<FILE>) {
    $lines++;
    $chars += length($_); //what _ stands for?
    $words += scalar(split(/\s+/, $_)); //what is /\s+/, $_
}

print("lines=$lines words=$words chars=$chars\n");
    
por pranav 19.10.2015 / 14:53

2 respostas

3

<> é o operador de diamante. Usá-lo em um loop while é o mesmo que

while (defined($_ = readline FILE)) {

Então, ele lê o arquivo linha por linha, atribuindo o conteúdo de cada linha à variável de tópico $_ .

O operador ++ adiciona um a uma variável.

O operador += adiciona o valor righthandside à esquerda. length retorna o comprimento de uma string.

split divide a string em uma expressão regular. Aqui, \s+ é usado, o que significa um ou mais caracteres em branco. Chamar escalar no resultado retorna o número de elementos obtidos.

    
por choroba 19.10.2015 / 15:02
0

Assumindo que é Perl, (você deveria ter deixado isso claro).

Leia man perlintro , que diz, em parte:

Files and I/O
   You can open a file for input or output using the "open()" function.
   It's documented in extravagant detail in perlfunc and perlopentut, but
   in short:

    open(my $in,  "<",  "input.txt")  or die "Can't open input.txt: $!";
    open(my $out, ">",  "output.txt") or die "Can't open output.txt: $!";
    open(my $log, ">>", "my.log")     or die "Can't open my.log: $!";

   You can read from an open filehandle using the "<>" operator.  In
   scalar context it reads a single line from the filehandle, and in list
   context it reads the whole file in, assigning each line to an element
   of the list:

    my $line  = <$in>;
    my @lines = <$in>;

Se isso não for suficiente, leia man perlfunc e man perlopentut

    
por waltinator 19.10.2015 / 15:07