Perl はシェルではありません。一般的には、他に選択肢がない場合や、意図的に手っ取り早いハックを行っている場合を除き、バッククォート演算子と system() 関数を使用しないことをお勧めします。
サブルーチンを書き、そのように再帰を行うことを学びましょう。サブルーチンのこつがなければ、再帰に取り組むべきではありません。
とにかく、あなたがしていることについて話し合いましょう。
バックティックの呼び出しは問題ありません:
`perl ./myperlscript.pl "$i"`
...そして、そのプロセスがstdoutに入れるものは何でも返します。したがって、プログラムは標準出力に出力する必要があります。
Perl では、反復されるリストに項目を追加すると、反復が続行されます。
push (@arr,10);
foreach $i (@arr) {
print "$i\n";
if($i > 0) {
push(@arr,$i-1);
}
}
... 10 から 0 までのカウントダウンを出力します。そのため、コードが機能する可能性があります。しかし、これは紛らわしいモデルであり、慣れるには良い習慣ではないと思います。ループしているデータ構造を変更することは、一般的に良い習慣とは見なされません。
あなたのコードは、停止条件の証拠を示しませんでした。再帰するときは、常に停止条件を考慮する必要があります。
バックティック呼び出しで @result 配列に何が起こっても、現在のプロセスの @result 配列には影響しないことに注意してください。それらは互いに見えません。