Works not on words, but 114 char:
@ARGV="ctriangle.txt";
sub n{print$"x(40-$r),@b,$/}
@a=map{split}<>;$,=$";while($r++<@a){@b=splice@a,0,$r;n}$r--,n
"We are not alone"(FZ)
Update: Most of this is just an adaption of the
other code in this nice thread, including the $". I like
xterm's idea of map{split}<> very much I must say.
But the '$,' was my own creativity....