I feel that all of the above suggestions, though good, missed your original point: "I do scripts for biologists ... and they always get lost with $_." If biologists can't understand $_, then keep your code simple for them. Don't use $_, and while you're at it avoid map & grep. It's not that much harder to write out a loop, but it can make a world of difference to someone who is only a novice in perl.
I'd agree with the above; also, maybe it is possible to put a thicker line between things that 'custom users' need or are allowed to change ?
Maybe offering a distinct Config file, or separating the allowed/easy to change code in front of the scripts or even distinct modules ?
If the users are really meant to tamper the very hearth of underlying algorithms and so, $_ would probably be the smallest difficulty to overcome.
Maybe you can do yet another thing, as I'm just learning from the book I mention in the signature below:
can you offer them some placeholder subs and use callbacks, so that they could easily manage their own particular code snippets within the otherwise bigger code machinery ?
Thanks all for your replies. I have to say that, although blahblahblah didn't give me the solution I was looking for, he understood me perfectly and he came up with a nice solution. Thanks all. Problem solved: I won't use grep.