Re: Awk print statement alters the argument variable's content

2017-01-13 Thread Corinna Vinschen
On Jan 13 01:31, Brian Inglis wrote:
> On 2017-01-12 05:26, Lundberg Christer wrote:
> > This program run with GNU awk 4.1.4 (currently installed with
> > Cygwin):
> > 
> >   awk '
> > BEGIN { OFMT="%.8g"
> > buf = 1+0.1
> > buf = buf "a"
> > print "Length before print:", length(buf)
> > print buf " "
> > print buf
> > print buf " "
> > print "Length after print:", length(buf)
> >   }
> >   '
> > 
> > produces the following output on our system:
> > 
> > Length before print: 4
> > 1.1a 
> > 1.1
> > 1.1 
> > Length after print: 3
> > 
> > so it appears that the "print buf" statement unexpectedly alters the
> > content of buf.
> > With awk 4.1.3, we got the expected output
> > 
> > Length before print: 4
> > 1.1a 
> > 1.1a
> > 1.1a 
> > Length after print: 4
> 
> Confirmed problem with any OFMT except default or %.6g, also goes 
> away if you change awk line 3 to: buf = "" buf "a":

It's an upstream bug.  I asked on the gawk ML.


Thanks,
Corinna

-- 
Corinna Vinschen  Please, send mails regarding Cygwin to
Cygwin Maintainer cygwin AT cygwin DOT com
Red Hat


signature.asc
Description: PGP signature


Re: Awk print statement alters the argument variable's content

2017-01-13 Thread Brian Inglis
On 2017-01-12 05:26, Lundberg Christer wrote:
> This program run with GNU awk 4.1.4 (currently installed with
> Cygwin):
> 
>   awk '
> BEGIN { OFMT="%.8g"
> buf = 1+0.1
> buf = buf "a"
> print "Length before print:", length(buf)
> print buf " "
> print buf
> print buf " "
> print "Length after print:", length(buf)
>   }
>   '
> 
> produces the following output on our system:
> 
> Length before print: 4
> 1.1a 
> 1.1
> 1.1 
> Length after print: 3
> 
> so it appears that the "print buf" statement unexpectedly alters the
> content of buf.
> With awk 4.1.3, we got the expected output
> 
> Length before print: 4
> 1.1a 
> 1.1a
> 1.1a 
> Length after print: 4

Confirmed problem with any OFMT except default or %.6g, also goes 
away if you change awk line 3 to: buf = "" buf "a":
 
$ uname -srvmo
CYGWIN_NT-10.0 2.6.1(0.305/5/3) 2016-12-16 11:55 x86_64 Cygwin
$ awk --version
GNU Awk 4.1.4, API: 1.1 (GNU MPFR 3.1.5, GNU MP 6.1.1)
Copyright (C) 1989, 1991-2016 Free Software Foundation.

-- 
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

--
Problem reports:   http://cygwin.com/problems.html
FAQ:   http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info:  http://cygwin.com/ml/#unsubscribe-simple



Awk print statement alters the argument variable's content

2017-01-12 Thread Lundberg Christer
This program run with GNU awk 4.1.4 (currently installed with Cygwin):

  awk '
BEGIN { OFMT="%.8g"
buf = 1+0.1
buf = buf "a"
print "Length before print:", length(buf)
print buf " "
print buf
print buf " "
print "Length after print:", length(buf)
  }
  '

produces the following output on our system:

Length before print: 4
1.1a 
1.1
1.1 
Length after print: 3

so it appears that the "print buf" statement unexpectedly alters the content of 
buf.
With awk 4.1.3, we got the expected output

Length before print: 4
1.1a 
1.1a
1.1a 
Length after print: 4


--
Problem reports:   http://cygwin.com/problems.html
FAQ:   http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info:  http://cygwin.com/ml/#unsubscribe-simple