あなたのコードでは、$ID に一致するとキャリッジ リターンが出力され、それ以外の場合は数字が出力されます。よくわかりませんが、printf が印刷前にキャリッジ リターンを出力している可能性があります。印刷と二重引用符を使用して変数を解釈します。
スクリプトの主な問題は、一致する ID をチェックするためのロジックです。インデックスに一致する場合は $ID を出力し、インデックスに一致しない場合は $index を出力しますが、これら 2 つの条件では、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)。2 行目が読み込まれると、スクリプトは 1 から 4 を一緒に出力し (elsif にキャリッジ リターンはありません)、キャリッジ リターン (5 ではなく 4 が入力されたと思われます) に続いて 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
お役に立てれば。