zsh-workers
 help / color / mirror / code / Atom feed
From: Stephane Chazelas <stephane.chazelas@gmail.com>
To: Bart Schaefer <schaefer@brasslantern.com>
Cc: "zsh-workers@zsh.org" <zsh-workers@zsh.org>
Subject: Re: f() { local -ar path=(/bin); };f gives an error
Date: Wed, 29 Nov 2017 22:12:08 +0000	[thread overview]
Message-ID: <20171129221208.GA1984@chaz.gmail.com> (raw)
In-Reply-To: <CAH+w=7ZrxOwbY1iWCS5OcpNkoAOhQnYMCQX47+M3=yF9MNLgkg@mail.gmail.com>

2017-11-27 13:34:05 -0800, Bart Schaefer:
> > On 11/27/2017 03:17 PM, Stephane Chazelas wrote:
> >>
> >> The issue here is that when you're trying to make $path (the
> >> special array variable tied to $PATH) readonly (with a value)
> >> locally in a function, that doesn't work.
> 
> Something a little weird happens with order-of-operations for tied parameters:
> 
> f() { local -ar path; PATH=foo; echo $path }
> 
> Note there's no error there, $path is changed by the assignment to
> $PATH even though the array is read-only.  The reverse also works; you
> have to make both parameters read-only to prevent changing either one
> by assignment to the other.
> 
> f() { path=(/bin); local -r path PATH; ... }  # achieves the desired effect

Wouldn't we want to propagate the "readonly" attribute to the
"tied" variable when the other one is made "readonly"?

There are other combinations that don't work so well like:

$ zsh -c 'typeset -Z3 -T A a; a=1; echo $A'
001
$ zsh -c 'typeset -T A a; typeset -Z3 A; a=(2 3); echo $a'
2 3
$ zsh -c 'typeset -T A a; typeset -Z3 A; A=1; echo $a'
1

-U is OK (often used with $PATH).

Would be worth going through all the combinations that one may
want to use and clarify which ones are legal which ones are not.

Having typeset return an error when two exclusive options are
used together (like typeset -iT (documented), typeset -ai (not))
would be helpful.

(why not allowing -i/-F/-Z... and most other scalar flags for
arrays and hashes btw?)

-- 
Stephane.


      parent reply	other threads:[~2017-11-29 22:12 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-26 23:21 Stephane Chazelas
2017-11-26 23:28 ` Eric Cook
2017-11-27 20:17   ` Stephane Chazelas
2017-11-27 21:03     ` Eric Cook
2017-11-27 21:34       ` Bart Schaefer
2017-11-27 21:35         ` Bart Schaefer
2017-11-29 22:12         ` Stephane Chazelas [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171129221208.GA1984@chaz.gmail.com \
    --to=stephane.chazelas@gmail.com \
    --cc=schaefer@brasslantern.com \
    --cc=zsh-workers@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).