-function ctags {
- if [ $# != 0 ];then `which ctags` "$@";else
- rm -f tags;find -type f -a '(' -name "*.[chC]" -o -name "*.cc" -o -name "*.java" ')'|xargs `which ctags` -a --file-tags
- fi; }; export -f ctags
+function ctags {(unset ctags;
+ if [ $# -ne 0 -a '(' $# -ne 1 -o "$1" '!=' "--c-types=+px" ')' ];then ctags "$@";else
+ find -type f -a '(' -false \
+ -o -name "*.[chC]" \
+ -o -name "*.cc" \
+ -o -name "*.java" \
+ -o -name "*.p[lm]" \
+ ')' \
+ |ctags --file-tags -L - "$@"
+ fi; );}; export -f ctags
+function ctagsh { ctags "--c-types=+px"; }; export -f ctagsh
+function cpan {(unset cpan; if [ $# = 0 ];then cpan;else perl -MCPAN -e "install qw($*);";fi; );}; export -f cpan
+function exx { cd "`unset exx;exx "$@"|tee /proc/self/fd/2|tail -n1|sed -n 's/^extdir=//p'`"; };export -f exx
+function revlines { perl -e 'my @r=();push @r,$_ while (<>);print pop @r while @r;'; }; export -f revlines