【发布时间】:2016-10-12 00:09:13
【问题描述】:
我想知道为什么我似乎无法在 Perl 中接受 2 行 我的代码的 sn-p 是
#!/usr/bin/perl -w
open my $fh, "<", "data.txt" or die;
$line1 = <$fh>;
$line2 = <$fh>;
print $line1."\n";
print $line2."\n";
while(1){
@rows = <$fh>;
print "$rows[$e]";
$e++;
print "$rows[$e]";
}
这是我在 Data.txt 中拥有的那种数据
5000 5000 12497500 0
5000 5000 33258530 0
5000 13 51822 0
5000 13 130147 0
5000 28 75016 0
5000 28 181343 0
5000 5000 4999 4999
5000 5000 12580635 4999
我四处寻找可能的解决方案,我在这里找到了一些有趣的线索http://www.perlmonks.org/?node_id=620077,尤其是这些
my $fh = open("file");
for =$fh->$line1,$line2 {
# do whatever with the two lines
}
和
for (;;) {
my $line1 = <$fh>;
last if not defined $line1;
my $line2 = <$fh>;
last if not defined $line2;
...
}
我也可以问一下for =$fh->$line1,$line2 为什么会有 =$ 以及为什么它不起作用或它是如何起作用的?
感谢任何帮助!
干杯
更新 好吧,所以我可能遗漏了一些东西,但这是我想从线条上做的操作
while(1){
print '-'x50 . "\n";
my $line1 = <$fh>;
if($line1 =~ /^\s+(\d)\s+(\d)\s+(\d)\s+(\d)\s*$/){
my $A1 = $1;
my $B1 = $2;
my $C1 = $3;
my $D1 = $4;
}
last unless defined $line1;
my $line2 = <$fh>;
if($line2 =~ /^\s+(\d)\s+(\d)\s+(\d)\s+(\d)\s*$/){
my $A2 = $1;
my $B2 = $2;
my $C2 = $3;
my $D2 = $4;
}
last unless defined $line2;
my @type = ("AL", "PL", "RL", "AA", "PA", "RA", "AB", "PB", "RB", "AR", "PR", "RR", "AS", "PS", "RS", "AV", "PV", "RV");
print("For $type[$i]\n");
print("Node : $A1\n");
print("Depth : $B1\n");
print("Nb : $C1\n");
print("Nb+s : $C1+$C2\n");
print("Nk : $A1\n");
print("Nu : $A1/6\n");
print("Average number of comparisons is $C2/(7/6*$A1)\n");
$i++;
}
print '--- END ---'."\n";
这是基于 xxFelixxxx 的回复
【问题讨论】:
-
自从我编写 perl 以来已经有一段时间了,但
while(1){看起来像一个没有中断的无限循环。我假设这是故意的,但以防万一......抬头。另外,$e在哪里初始化? -
for =$fh->$line1,$line2正在使用perl6,这应该被视为与perl又名perl5不同但相关的语言。 -
将
use strict;添加到您的所有脚本中,并修复它抱怨的所有问题,这将减少错误代码。 -
是的 while(1) 是故意的,很抱歉 $e 在顶部被初始化但我错误地把它取出来了。 @ParthianShot
-
啊,我看到了关于 for =$... 但可以在 perl5 中做到这一点吗? - nvm 在底部看到你的答案对不起!@xxfelixxx
标签: perl