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 ;