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 ;