From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 Received: from zero.zsh.org (zero.zsh.org [IPv6:2a02:898:31:0:48:4558:7a:7368]) by inbox.vuxu.org (Postfix) with ESMTP id 58AAD259CA for ; Sun, 11 Feb 2024 08:01:29 +0100 (CET) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1707634889; b=ZFmScQ3vUaUQQGJJWme4RRGi9pQsPwk2b5ASE9knttstAvfEZYv6iJmPRyRXnytkff9YwjtLDl xpfGZIJ6UYdB4pnZAJ/G5dWlCICZljBUqTFohc+bic+/YQmf92mzWSO0wcyMXiWCbw7917FfLa r7kaNyGEzEqkqbcLC9Gei3F0d/GtVWGi8jZUiLQI4feO/EGpd+aKHb5u2holAAx3jc34qnTbp+ evrQxR/7hkOoraGPn4+T4EUtfe3pk8zopAfb7EFz2/JO6trh7MnVDFq42ZCVfSi4S6e48DG2mH FpXhD9BMy7NrTht+Oxzu1d7E6l0/G+mDoRt8qO1HmOA0dA==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (relay7-d.mail.gandi.net) smtp.remote-ip=217.70.183.200; dmarc=none header.from=chazelas.org; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20210803; t=1707634889; bh=gQigTBbcK/B/3zRuACkS6m/tBxXWQU1mRZyzwfwQr3I=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:In-Reply-To:Content-Type:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date:DKIM-Signature; b=DqZe+Dq9tSge7yDztkJvoAVhjtNXFnwFS7MG123TX7kQKt8+OKk1sYfHO/o7C6Sc7EhTWYj4WS DTsHQGUzKDfYqot83Q7Vd6Wphl6LeHW1BJsCvb74YSO55tMH7hmHvAtzxa5y7oGCfaEO11k1Jy qiqgkAM5P6fIe1lApzqb87IBnG5iv2MOlobelhnGMHViPrcMKoDw8LMJmlAotDa0jVt5fQQPz9 K9RETRSD694yt3FVmxHSU3+fBdAzVxRtk/KhLMs6/8waLQaqLSpyIHp+sximUF5sW5HS9aiADh y5mxsrq09+QZB/uDjJk+HUYN/WpXsFX8Br70yKaxL41cig==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20210803; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:In-Reply-To:Content-Type:MIME-Version :References:Message-ID:Subject:Cc:To:From:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID; bh=31dTJ4/VlM0Q7qA+lGnIhkMQ1Ea0gX/X/AndTwzWF+M=; b=m+AMGV/EcKeM8PyupEVjbcKIjV yyVsSCwzkFwsr+bT+6bEML4pdIU91wkI89saZiaYxXBurJ6B/Tmd+siv14urO1sHzNX2Q3rMkjWaX s8MRt93VG+re12V1koRFo211XYAHmibCVOnLHQSTeJCc0E1qSU3a4nqYKMO7QaEYaWRvUsLvs0Aeq Ed3HslsHxTGHrmJgL9IsD3WLLEtetUmWyGnY3YoZk8h8sdcZ7t4mAYtvFVwzI5UVsyWisfeQxtUkq 72C+YTrE6HlPbsScYB8vhwSDCn/z0MPKgj7w+1l+m6+FoqKlHsDB0VYdWAYlAuphGW9DiE3OrT123 oa8kcMAQ==; Received: by zero.zsh.org with local id 1rZ3qD-000BBG-3f; Sun, 11 Feb 2024 07:01:29 +0000 Authentication-Results: zsh.org; iprev=pass (relay7-d.mail.gandi.net) smtp.remote-ip=217.70.183.200; dmarc=none header.from=chazelas.org; arc=none Received: from relay7-d.mail.gandi.net ([217.70.183.200]:45245) by zero.zsh.org with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) id 1rZ3pV-000AqZ-0U; Sun, 11 Feb 2024 07:00:45 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 813F320005; Sun, 11 Feb 2024 07:00:43 +0000 (UTC) Date: Sun, 11 Feb 2024 07:00:42 +0000 From: Stephane Chazelas To: Bart Schaefer Cc: Oliver Kiddle , Zsh hackers list Subject: Re: [PATCH 1/3]: Add named references Message-ID: <20240211070042.4j37hkgjjn3dfjqd@chazelas.org> Mail-Followup-To: Bart Schaefer , Oliver Kiddle , Zsh hackers list References: <67689-1675827940.088548@BxvG.D9_b.7RzI> <12608-1675903622.800470@Xj82.e3y1.svhG> <66045-1675975796.128039@FBF_.0yMO.Y8fk> <40726-1676098925.110777@U2kb.d0Pd.I9ml> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-GND-Sasl: stephane@chazelas.org X-Seq: 52530 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: , List-Subscribe: , List-Unsubscribe: , List-Post: List-Owner: List-Archive: 2023-02-10 23:45:36 -0800, Bart Schaefer: [...] > A named parameter declared with the '-n' option to any of the 'typeset' > commands becomes a reference to a parameter in scope at the time of > assignment to the named reference, which may be at a different call > level than the declaring function. For this reason, it is good practice > to declare a named reference as soon as the referent parameter is in > scope, and as early as possible in the function if the reference is to a > parameter in a calling scope. [...] One difference with ksh93: if the target variable was not set at the time of the "typeset -n ref=target", then when ref is assigned it may end up refering to a local target: $ ./Src/zsh -c 'function f { typeset -n ref=$1; typeset var=foo; ref=X; echo "$ref ${(!)ref} $var"; }; f var; echo "$var"' X var X $ ./Src/zsh --emulate ksh -c 'function f { typeset -n ref=$1; typeset var=foo; ref=X; echo "$ref ${!ref} $var"; }; f var; echo "$var"' X var X $ Compare with ksh: $ ksh -c 'function f { typeset -n ref=$1; typeset var=foo; ref=X; echo "$ref ${!ref} $var"; }; f var; echo "$var"' X var foo X That's a common use case like for the zslurp function discussed on zsh-users where one would do: cmd | zslurp var To get the output of cmd verbatim into $var with $var potentially undeclared beforehand, which wouldn't work if var was used locally by zslurp. It can be worked around with a typeset -g $1 before the typeset -n var=$1 $ ./Src/zsh --emulate ksh -c 'function f { typeset -g $1; typeset -n ref=$1; typeset var=foo; ref=X; echo "$ref ${!ref} $var"; }; f var; echo "$var"' X var foo X But it seems to me it would be better to align with ksh's behaviour in this instance. -- Stephane