在您的代码中,当您匹配 $ID 时,您会打印回车,否则,您将打印出数字。我不确定,但 printf 可能会在打印之前输出回车。我只会使用打印和双引号来解释变量。
您的脚本的主要问题是您检查 ID 是否匹配的逻辑。如果匹配索引,则打印 $ID,如果不匹配索引,则打印 $index,但是在这两个条件下,我看不出如何到达 if 语句的 else 部分,除非 $ID 不等于 $index 和等于 $index (这不太可能发生)。我会将 if 更改为以下内容:
if ( $ID == $index ) {
print "$ID\n";
}
else {
print "$index does not exist\n";
}
如果您的问题是关于为什么要获得该特定输出,那么:
脚本的输出将是 1 后跟回车,然后将在下一行打印 2 到 9(一起因为 elsif 中的 ($ID != $index) 条件中没有回车输出)读入的第一行(输入为 1)。读入第二行时,脚本一起打印出 1 到 4(elsif 中没有回车),并且似乎打印出回车(我怀疑输入的是 4 而不是 5),然后是 5 到 9。然后当读入最后一行时,脚本会一起打印出 1 到 8(如前所述),然后是 9,然后是回车。
如果你纠正你的逻辑,它应该会给你你想要的结果。
这是我使用您的脚本作为起点的想法:
use strict;
my $ID;
my $index;
while (<>){
my ($ID) = split;
for ($index=1; $index<=9; $index++)
{
if ($index == $ID)
{
print "$ID\n";
}
else
{
print "$index does not exist\n";;
}
}
print "\n";
}
我得到以下输出:
1
2不存在
3 不存在
4 不存在
5 不存在
6 不存在
7 不存在
8 不存在
9 不存在
1 不存在
2不存在
3 不存在
4 不存在
5
6 不存在
7 不存在
8 不存在
9 不存在
1 不存在
2不存在
3 不存在
4 不存在
5 不存在
6 不存在
7 不存在
8 不存在
9
根据您对输出的期望信息,我希望这会有所帮助:
use strict;
my $ID;
# Initialized the index to be 1
my $index = 1;
while (<>){
my ($ID) = split;
while (( $ID != $index ) &&
( $ID < 10))
{
print "$index does not exist\n";
$index++;
}
print "$ID\n";
$index++;
}
__DATA__
1
5
6
我得到的输出是:
1
2不存在
3 不存在
4 不存在
5
6 不存在
7 不存在
8 不存在
9
希望这可以帮助。