That's a nice variation. I think the two could be combined with arguments used by default but falling back to interactive behavior in their absence.
The regex path matching on a remove or remove all seems a little off:
> export PATHTEST=/foo:/foobar:/foo/bar
> setpath.pl --/foo
> more .setpath.out
This works if you append a ':' to the path you're removing (which I guess the script could do for you). It might be nice to add some sort of wild carding to the removals so you could remove every directory rooted at /foo.
I initially wrote mine to do removes but for my usage I prefer to temporarily toggle directories on/off. The tools developers I work with chose executable names that match those of a number of gnu tools I make use of so on occassion I need to temporaily remove one or other directory from my PATH.