> > typeset -g "${1-x}=$match[2]" "${2-y}=$match[1]" > Doesn't work either. I guess there's no way to access variables > by the same name in that parent scope or to unlocal a variable? I just stumbled on the module zsh/param/private , which makes it possible (but I won't claim that it's very practical): assign() { > print -v "$1" "$2" > } > > curpos() { > set -o localoptions -o extendedglob > # Initialize the return variables. Without this, print -v fails if > # the variable is the same as one of the private variables. > eval "${1-x}= ${2-y}=" > zmodload zsh/param/private > local -P -a match mbegin mend > local -P answer > IFS= read -rsdR -t0.2 answer$'?\e[6n' && > [[ $answer = (#b)$'\e['(<->)';'(<->) ]] && > assign ${1-x} "$match[2]" && > assign ${2-y} "$match[1]" > } > > curpos answer match > echo x=$answer y=$match > It's a bit strange that the initialization is needed. Private variables don't hide global variables of the same name, nor prevent their assignment, but prevent their initial declaration. Philippe