Perl:使用基于索引的方法循环输入行

alv*_*tar 3 perl text-processing

这是perl中的初学者最佳实践问题.我是这种语言的新手.问题是:

如果我想处理程序中的输出行,我该如何以特殊方式格式化第一行?

我想到了两种可能性:

1)设置第一次循环后的标志变量.但它将针对每个周期进行评估.不好的解决方案

2)基于索引的循环(如"for").然后我会在i = 1中启动循环.这个解决方案要好得多.问题是我该怎么做?

我刚刚找到了使用while(<>)构造循环的代码.

在这里你可以看到更好的:

$command_string = "par-format 70j p0 s0 < " . $ARGV[0] . "|\n";                                                                                

open DATA, $command_string  or die "Couldn't execute program: $!";

print "\t    <div>&?nbsp;&?nbsp;&?nbsp;&?nbsp;&?nbsp;&?nbsp;&?nbsp;&?nbsp;&?nbsp;&?nbsp;|-- <strong>Description</strong></div>\n";
while ( defined( my $line = <DATA> )  ) {
   chomp($line);
   # print "$line\n";
   print "\t    <div>&?nbsp;&?nbsp;&?nbsp;&?nbsp;&?nbsp;&?nbsp;&?nbsp;&?nbsp;&?nbsp;&?nbsp;|&?nbsp;&?nbsp;&?nbsp;-- " . $line  . "</div>\n";
}

close DATA;
Run Code Online (Sandbox Code Playgroud)

也请不要犹豫,纠正这里的任何代码,这是我的第一首perl诗.

谢谢!

D.S*_*ley 8

您可以随时使用$.或使用英文名称$INPUT_LINE_NUMBER来控制循环中的逻辑:

while (my $line = <>) {
    if ($. == 1) {
        # do cool stuff here
    }
    # do normal stuff here
}
Run Code Online (Sandbox Code Playgroud)


fma*_*arc 5

要以不同方式处理第一行,您可以放置

$line = <DATA>;
Run Code Online (Sandbox Code Playgroud)

在你的循环之上.

通过正确检查读取问题(空文件等),这应该是

if ($line = <DATA>) {
    ...do special things...
}

while (my $line = <DATA>) {
    ...do regular things...
}
Run Code Online (Sandbox Code Playgroud)

我不确定这个defined()电话.您可能不需要它,因为空字符串具有错误的真值.