Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.85k stars 526 forks source link

sprintf documentation should mention numeric conversion #135

Closed p5pRT closed 20 years ago

p5pRT commented 24 years ago

Migrated from rt.perl.org#940 (status was 'resolved')

Searchable as RT940$

p5pRT commented 24 years ago

From garethr@cre.canon.co.uk

This program​:

  $x = 2**32;   print "\$x is $x\n";   print sprintf "\$x is %d\n"\, $x;

prints

  $x is 4294967296   $x is -1

I think that the section on `sprintf' in the `perlfunc' manpage should document exactly what numeric conversion takes place. For example\, does %d always print the value modulo 2^32\, or does it depend on the operating system or architecture?

Perl Info ``` Site configuration information for perl 5.00502: Configured by abw at Thu Nov 19 10:50:08 GMT 1998. Summary of my perl5 (5.0 patchlevel 5 subversion 2) configuration: Platform: osname=solaris, osvers=2.6, archname=sun4-solaris uname='sunos bandanna 5.6 generic_105181-03 sun4u sparc sunw,ultra-1 ' hint=previous, useposix=true, d_sigaction=define usethreads=undef useperlio=undef d_sfio=undef Compiler: cc='gcc', optimize='-O', gccversion=2.8.0 cppflags='-I/opt/gnu/include -I/user/perl/build/include' ccflags ='-I/opt/gnu/include -I/user/perl/build/include' stdchar='unsigned char', d_stdstdio=define, usevfork=false intsize=4, longsize=4, ptrsize=4, doublesize=8 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16 alignbytes=8, usemymalloc=n, prototype=define Linker and Libraries: ld='gcc', ldflags ='-L/opt/gnu/lib -L/user/perl/build/lib' libpth=/opt/gnu/lib /lib /usr/lib /usr/ccs/lib /user/perl/build/lib libs=-lsocket -lnsl -lgdbm -ldl -lm -lc -lcrypt -ldb libc=/lib/libc.so, so=so, useshrplib=false, libperl=libperl.a Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' ' cccdlflags='-fPIC', lddlflags='-G -L/opt/gnu/lib -L/user/perl/build/lib' Locally applied patches: @INC for perl 5.00502: /apps/perl5/lib/5.00502/sun4-solaris /apps/perl5/lib/5.00502 /apps/perl5/lib/site_perl/5.005/sun4-solaris /apps/perl5/lib/site_perl/5.005 . Environment for perl 5.00502: HOME=/user/garethr LANG=C LD_LIBRARY_PATH=/usr/dt/lib:/usr/openwin/lib:/apps/X11R5/lib:/usr/lib LOGDIR (unset) PATH=/usr/dt/bin:/usr/openwin/bin:/bin:/usr/bin:/usr/ucb:/bin:/usr/bin:/cre/bin:/apps/gcc-2.8.0/bin:/apps/frame5/bin:/apps/emacs/bin:/apps/tex/bin:/apps/perl5/bin:/user/web/bin/scripts:/user/web/bin/SunOS-5.6:/apps/gnu/bin:/apps/mysql/bin:/usr/ccs/bin:/apps/X11R5/bin:/usr/openwin/bin PERL_BADLANG (unset) SHELL=/cre/bin/bash ```
p5pRT commented 24 years ago

From [Unknown Contact. See original ticket]

garethr@​cre.canon.co.uk (Gareth Rees) wrote​:

I think that the section on `sprintf' in the `perlfunc' manpage should document exactly what numeric conversion takes place. For example\, does %d always print the value modulo 2^32\, or does it depend on the %operating system or architecture?

An appeal to the ANSI spec would probably yield the answer\, which is that it defaults to native 'int' unless you've asked Perl to 'USE_64_BITS'.

To avoid having to appeal to a non-Artistic source of documentation\, I suggest the following addition. Note that I've altered 'flags' to 'characters' as well\, since some of the 'flags' mentioned are in fact conversion characters.

Inline Patch ```diff --- pod/perlfunc.pod.orig Mon Aug 23 15:16:57 1999 +++ pod/perlfunc.pod Sun Sep 5 15:57:09 1999 @@ -4102,4 +4102,5 @@ l interpret integer as C type "long" or "unsigned long" h interpret integer as C type "short" or "unsigned short" + If no flags, interpret integer as C type "int" or "unsigned" There is also one Perl-specific flag: @@ -4119,5 +4120,5 @@ If Perl understands "quads" (64-bit integers) (this requires either that the platform natively supports quads or that Perl -has been specifically compiled to support quads), the flags +has been specifically compiled to support quads), the characters d u o x X b i D U O ```