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;
也请不要犹豫,纠正这里的任何代码,这是我的第一首perl诗.
谢谢!
您可以随时使用$.或使用英文名称$INPUT_LINE_NUMBER来控制循环中的逻辑:
while (my $line = <>) {
    if ($. == 1) {
        # do cool stuff here
    }
    # do normal stuff here
}
要以不同方式处理第一行,您可以放置
$line = <DATA>;
在你的循环之上.
通过正确检查读取问题(空文件等),这应该是
if ($line = <DATA>) {
    ...do special things...
}
while (my $line = <DATA>) {
    ...do regular things...
}
我不确定这个defined()电话.您可能不需要它,因为空字符串具有错误的真值.