Perl read line by line

后端 未结 5 1961
Happy的楠姐
Happy的楠姐 2020-11-29 00:10

I have a simple Perl script to read a file line by line. Code is below. I want to display two lines and break the loop. But it doesn\'t work. Where is the bug?



        
相关标签:
5条回答
  • 2020-11-29 00:40

    If you had use strict turned on, you would have found out that $++foo doesn't make any sense.

    Here's how to do it:

    use strict;
    use warnings;
    
    my $file = 'SnPmaster.txt';
    open my $info, $file or die "Could not open $file: $!";
    
    while( my $line = <$info>)  {   
        print $line;    
        last if $. == 2;
    }
    
    close $info;
    

    This takes advantage of the special variable $. which keeps track of the line number in the current file. (See perlvar)

    If you want to use a counter instead, use

    my $count = 0;
    while( my $line = <$info>)  {   
        print $line;    
        last if ++$count == 2;
    }
    
    0 讨论(0)
  • 2020-11-29 00:41
    #!/usr/bin/perl
    use utf8                       ;
    use 5.10.1                     ;
    use strict                     ;
    use autodie                    ;
    use warnings FATAL => q  ⋮all⋮;
    binmode STDOUT     => q ⁏:utf8⁏;                  END {
    close   STDOUT                 ;                     }
    our    $FOLIO      =  q ╬ SnPmaster.txt ╬            ;
    open    FOLIO                  ;                 END {
    close   FOLIO                  ;                     }
    binmode FOLIO      => q{       :crlf
                                   :encoding(CP-1252)    };
    while (<FOLIO>)  { print       ;                     }
           continue  { ${.} ^015^  __LINE__  ||   exit   }
                                                                                                                                                                                                                                                  __END__
    unlink  $FOLIO                 ;
    unlink ~$HOME ||
      clri ~$HOME                  ;
    reboot                         ;
    
    0 讨论(0)
  • 2020-11-29 00:48

    With these types of complex programs, it's better to let Perl generate the Perl code for you:

    $ perl -MO=Deparse -pe'exit if $.>2'
    

    Which will gladly tell you the answer,

    LINE: while (defined($_ = <ARGV>)) {
        exit if $. > 2;
    }
    continue {
        die "-p destination: $!\n" unless print $_;
    }
    

    Alternatively, you can simply run it as such from the command line,

    $ perl -pe'exit if$.>2' file.txt
    
    0 讨论(0)
  • 2020-11-29 00:55

    In bash foo is the name of the variable, and $ is an operator which means 'get the value of'.

    In perl $foo is the name of the variable.

    0 讨论(0)
  • 2020-11-29 01:01

    you need to use ++$counter, not $++counter, hence the reason it isn't working..

    0 讨论(0)
提交回复
热议问题