こんにちは。
質問があります。

csh でスクリプトを書いたのですが、引数指定でも標準入力でも同様の動作をさせ
たい為に、再起呼び出しを利用してみました。スクリプトが test.sh として、以下
の
ような感じです。

#!/bin/csh/
if ($#argv > 0) then
    while ($#argv > 0)
        set BUFF = $argv[1]
        echo $BUFF | test.sh
        shift
    end
    exit 0
else
    while (1)
        set BUFF = `line`
        if ($status != 0) then
            break
        endif
        **処理本体** $BUFF
    end
    exit 0
endif

#似たような方法として、引数を全てテンポラリーファイルに吐いてから、まと
#めて cat して再帰する、というのも試みました。引数多の場合ファイル使用
#の方が高速で、引数少の場合ファイル不使用の方が高速でした。

引数の場合と標準出力の場合に似たような動作をするものは、コマンド類
でも色々ありますが(wc,ls等)、どのように実装されているのでしょうか?

最初は、引数がある場合とない場合で全く同じ処理をそれぞれコーディング
していたのですが、さすがに全く同じ処理を二箇所にコーディングするのは
馬鹿馬鹿しいと思い、再帰にしてみたのですが、邪道でしょうか?
このような場合に用いる一般的な手法というようなものはあるのでしょうか?

以上、ご教授の程、よろしくお願いいたします。