いや、だから

cat.pl
---- ここから---
#!/usr/bin/perl -n
print;
---- ここまで---

コマンド行:
cat.pl a.txt b.txt c.txt > d.txt

要するに
while(<>)
と
while(<STDIN>)
は違いますよって事だな