zsh-workers
 help / color / mirror / code / Atom feed
From: Peter Stephenson <pws@csr.com>
To: zsh-workers@sunsite.dk (Zsh hackers list)
Subject: Re: Shell variable tables:setting value for elemet 1 overwrites element 0
Date: Fri, 27 May 2005 12:47:26 +0100	[thread overview]
Message-ID: <200505271147.j4RBlQ7d015127@news01.csr.com> (raw)
In-Reply-To: <1050525144822.ZM19384@candle.brasslantern.com>

Bart Schaefer wrote:
> On May 25,  1:05pm, Peter Stephenson wrote:
> } Subject: Re: Shell variable tables:setting value for elemet 1 overwrites e
> }
> } wojciech.szenajch@bull.com.pl wrote:
> } > If this is the case, then any operation performed on element 0 should
> } > return error message. This is misleading that operations like
> } > TB[0]=zero; echo ${TB[0]} are accepted.
> } 
> } Yes, it was probably the wrong decision to accept [0] in this case.
> } I hope no one's relying on it, but you can't be sure.
> 
> I don't think there's any reason to allow *assignment* to index zero,
> except perhaps as a way to accomplish array=(newelement $array).  The
> dereference of $array[0] is a different matter.

Unfortunately it doesn't seem to be that easy to change one but not the
other; retrieving the index is fairly well buried.  Extra flags could do
this but the proliferation of getvalue() and fetchvalue() in the code
makes it rather messy to test for failure in all the right places.
Also, getindex(), which would have to perform the test, is called
multiple times deep inside the code.

Generally, the whole structure of the code is wrong to be able to solve
this sort of problem simply.  The current logic is to try something
involving a deep hierarchy of code, and if it fails, try something else.
Handling error cases systematically in code like this is very difficult.

There is actually a good reason for the structure, however, namely a
horrendous degree of context sensitivity in subscripts... if $foo exists
and is an array or scalar, foo[0]=bar should fail; if foo exists but is a
hash it should succeed; if foo doesn't exist, it needs to be created
as an array but this should fail when the assignment is made.  And so on.

I don't think this comes as a great surprise.

-- 
Peter Stephenson <pws@csr.com>                  Software Engineer
CSR PLC, Churchill House, Cambridge Business Park, Cowley Road
Cambridge, CB4 0WZ, UK                          Tel: +44 (0)1223 692070


**********************************************************************
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom they
are addressed. If you have received this email in error please notify
the system manager.

**********************************************************************


  reply	other threads:[~2005-05-27 11:47 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <OFB8636392.BEFDACE9-ONC125700C.00408215@bull.com.pl>
2005-05-25 12:05 ` Peter Stephenson
2005-05-25 14:48   ` Bart Schaefer
2005-05-27 11:47     ` Peter Stephenson [this message]
2005-05-25 10:55 wojciech.szenajch
2005-05-25 11:40 ` Peter Stephenson

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=200505271147.j4RBlQ7d015127@news01.csr.com \
    --to=pws@csr.com \
    --cc=zsh-workers@sunsite.dk \
    /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).