Perl逐行读取
我有一个简单的Perl脚本来逐行读取文件。代码如下。我想显示两行并打断循环。但它不起作用。臭虫在哪里Perl逐行读取,perl,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(INF
$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);
$file='SnPmaster.txt';
打开(信息,$file)或死亡(“无法打开文件”);
$count=0;
foreach$line(){
打印$行;
如果($++计数器==2){
最后;
}
}
关闭(信息);
您需要使用+$计数器
,而不是$++计数器
,因此它无法工作 如果启用了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;
#/usr/bin/perl
使用utf8;
使用5.10.1;
严格使用;
使用自动模具;
使用致命警告=>q⋮全部的⋮;
binmode标准输出=>q-:utf8;结束{
关闭STDOUT;}
我们的$FOLIO=q╬ SnPmaster.txt╬ ;
开本;结束{
合页;}
binmode FOLIO=>q{:crlf
:编码(CP-1252)};
while(){print;}
继续{${.}^015^_行_| |退出}
__结束__
取消$FOLIO的链接;
取消链接~$HOME||
clri~$HOME;
重启;
对于这些类型的复杂程序,最好让Perl为您生成Perl代码:
$ perl -MO=Deparse -pe'exit if $.>2'
很乐意告诉你答案
LINE: while (defined($_ = <ARGV>)) {
exit if $. > 2;
}
continue {
die "-p destination: $!\n" unless print $_;
}
在bash中,
foo
是变量的名称,$
是一个运算符,表示“获取的值”
在perl中,
$foo
是变量的名称。此外,OP初始化$count
,然后尝试递增$counter
,这只起作用,因为OP没有使用strict
或warnings
。是的,你是对的。我打开-w,我可以看到警告。但它显示了其他警告:Name“main::count”只使用了一次:在hello.pl第6行可能出现打字错误。名称“main::counter”只使用了一次:hello.pl第9行可能有输入错误。use strict;使用警告
将解决您的所有问题。解析为($++“计数器”)==2
请不要再使用老式的文件句柄。+1但是对于我的$line()
将整个文件读取到临时列表中,这可能会浪费内存while(my$line=)
也能正常工作(Perl正确地将其解释为while(defined(my$line=))
以便空行不会弄脏它),而不必读取整个文件。可以尝试用与文件$info->input\u line\u number()相关的某个值替换$。
)
:Perl最佳实践-不要使用神奇的标点符号。对不起,这到底是什么?我不确定这里最可怕的事情是什么,q()
需要代码>作为分隔符是非常可怕的。@EvanCarroll确实如此。或者至少,我可以,但我在这个节目中从来没有这样做过。仔细看看。啊,又可爱了,-
不是代码>。多有用啊。这是一个如此无聊的unicode字符,以至于我认为它是一个分号。在我复制并粘贴到一个文件之前,我根本不知道$HOME是从哪里来的。做得好。
$ 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