Perl逐行阅读
我有一个简单的Perl脚本来逐行读取文件。 代码如下。 我想显示两行并打破循环。 但它不起作用。 错误在哪里?
$file='SnPmaster.txt'; open(INFO, $file) or die("Could not open file."); $count = 0; foreach $line (<INFO>) { print $line; if ($++counter == 2){ last; } } close(INFO);  如果你use strict了,你会发现$++foo没有任何意义。 
以下是如何做到这一点:
 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; 
 这利用了特殊variables$. 跟踪当前文件中的行号。  (见perlvar ) 
如果您想使用计数器,请使用
 my $count = 0; while( my $line = <$info>) { print $line; last if ++$count == 2; } 
有了这些types的复杂程序,最好让Perl为您生成Perl代码:
 $ perl -MO=Deparse -pe'exit if $.>2' 
哪个会很高兴地告诉你答案,
 LINE: while (defined($_ = <ARGV>)) { exit if $. > 2; } continue { die "-p destination: $!\n" unless print $_; } 
或者,您可以简单地从命令行运行它,
 $ perl -pe'exit if$.>2' file.txt 
 你需要使用++$counter , 而不是 $++counter ,因此它不工作的原因.. 
 在bash中, foo是variables的名称, $是一个操作符,意思是“获取值”。 
 在perl $foo是variables的名字。 
 #!/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 ;