Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lots of warnings with diagnostics and (warn or die) #8450

Closed
p5pRT opened this issue May 15, 2006 · 4 comments
Closed

lots of warnings with diagnostics and (warn or die) #8450

p5pRT opened this issue May 15, 2006 · 4 comments

Comments

@p5pRT
Copy link

p5pRT commented May 15, 2006

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

Searchable as RT39141$

@p5pRT
Copy link
Author

p5pRT commented May 15, 2006

From fge7z@virginia.edu

Hello,

When diagnostics is in use, calling warn() or die() with a string
consiting of only newlines will cause perl to print lots of warnings.

  $ perl -e 'use diagnostics; warn "\n";'
Use of uninitialized value in substitution (s///) at
/usr/share/perl/5.8/diagnostics.pm line 576.
Use of uninitialized value in study at (eval 1) line 3.
Use of uninitialized value in substitution (s///) at (eval 1) line 4.
Use of uninitialized value in substitution (s///) at (eval 1) line 7.
Use of uninitialized value in substitution (s///) at (eval 1) line 10.
Use of uninitialized value in substitution (s///) at (eval 1) line 13.
Use of uninitialized value in substitution (s///) at (eval 1) line 16.
Use of uninitialized value in substitution (s///) at (eval 1) line 19.
Use of uninitialized value in substitution (s///) at (eval 1) line 22.
[snip]
  $

This is true for any number of newlines. Any non-newline character in the
string will make the diagnostics perform as expected.

  $ perl -e 'use diagnostics; warn "\r\n";'

  $

Perhaps the 'return unless defined' in splainthis() (shown below) should
not be commented out?

sub splainthis {
  return 0 if $TRACEONLY;
  local $_ = shift;
  local $\;
  ### &finish_compilation unless %msg;
  s/\.?\n+$//;
  my $orig = $_;
  # return unless defined;

  [snip]

Cheers,
Fitz

Perl Info

Flags:
     category=core
     severity=low

Site configuration information for perl v5.8.8:

Configured by Debian Project at Tue Apr  4 22:34:25 UTC 2006.

Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
   Platform:
     osname=linux, osvers=2.6.15.4, archname=i486-linux-gnu-thread-multi
     uname='linux ninsei 2.6.15.4 #1 smp preempt mon feb 20 09:48:53 pst 
2006 i686 gnulinux '
     config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN 
-Dcccdlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr 
-Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 
-Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 
-Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local 
-Dsitelib=/usr/local/share/perl/5.8.8 -Dsitearch=/usr/local/lib/perl/5.8.8 
-Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 
-Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 
-Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh 
-Uusesfio -Uusenm -Duseshrplib -Dlibperl=libperl.so.5.8.8 -Dd_dosuid -des'
     hint=recommended, useposix=true, d_sigaction=define
     usethreads=define use5005threads=undef useithreads=define 
usemultiplicity=define
     useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
     use64bitint=undef use64bitall=undef uselongdouble=undef
     usemymalloc=n, bincompat5005=undef
   Compiler:
     cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS 
-DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include 
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
     optimize='-O2',
     cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN 
-fno-strict-aliasing -pipe -I/usr/local/include'
     ccversion='', gccversion='4.0.3 (Debian 4.0.3-1)', gccosandvers=''
     intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
     d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
     ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', 
lseeksize=8
     alignbytes=4, prototype=define
   Linker and Libraries:
     ld='cc', ldflags =' -L/usr/local/lib'
     libpth=/usr/local/lib /lib /usr/lib
     libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
     perllibs=-ldl -lm -lpthread -lc -lcrypt
     libc=/lib/libc-2.3.6.so, so=so, useshrplib=true, 
libperl=libperl.so.5.8.8
     gnulibc_version='2.3.6'
   Dynamic Linking:
     dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
     cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'

Locally applied patches:



@INC for perl v5.8.8:
     /etc/perl
     /usr/local/lib/perl/5.8.8
     /usr/local/share/perl/5.8.8
     /usr/lib/perl5
     /usr/share/perl5
     /usr/lib/perl/5.8
     /usr/share/perl/5.8
     /usr/local/lib/site_perl
     /usr/local/lib/perl/5.8.7
     /usr/local/share/perl/5.8.7
     /usr/local/lib/perl/5.8.4
     /usr/local/share/perl/5.8.4
     /usr/local/lib/perl/5.8.3
     /usr/local/share/perl/5.8.3
     /usr/local/lib/perl/5.8.2
     /usr/local/share/perl/5.8.2
     .


Environment for perl v5.8.8:
     HOME=/home/felliott
     LANG=en_US.UTF-8
     LANGUAGE (unset)
     LD_LIBRARY_PATH (unset)
     LOGDIR (unset)

PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/home/felliott/bin
     PERL_BADLANG (unset)
     SHELL=/bin/bash



@p5pRT
Copy link
Author

p5pRT commented May 19, 2006

From @iabyn

On Mon, May 15, 2006 at 12​:46​:59PM -0700, Fitz Elliott wrote​:

When diagnostics is in use, calling warn() or die() with a string
consiting of only newlines will cause perl to print lots of warnings.

$ perl -e 'use diagnostics; warn "\n";'
Use of uninitialized value in substitution (s///) at
/usr/share/perl/5.8/diagnostics.pm line 576.
Use of uninitialized value in study at (eval 1) line 3.
Use of uninitialized value in substitution (s///) at (eval 1) line 4.
Use of uninitialized value in substitution (s///) at (eval 1) line 7.
Use of uninitialized value in substitution (s///) at (eval 1) line 10.
Use of uninitialized value in substitution (s///) at (eval 1) line 13.
Use of uninitialized value in substitution (s///) at (eval 1) line 16.
Use of uninitialized value in substitution (s///) at (eval 1) line 19.
Use of uninitialized value in substitution (s///) at (eval 1) line 22.
[snip]
$

This is true for any number of newlines. Any non-newline character in the
string will make the diagnostics perform as expected.

$ perl -e 'use diagnostics; warn "\r\n";'

$

Perhaps the 'return unless defined' in splainthis() (shown below) should
not be commented out?

sub splainthis {
return 0 if $TRACEONLY;
local $_ = shift;
local $\;
### &finish_compilation unless %msg;
s/\.?\n+$//;
my $orig = $_;
# return unless defined;

thansk for the report. I';ve fixed this in the developement version of
perl with the change below; simjilar to, but not quite what you suggest.

--
A power surge on the Bridge is rapidly and correctly diagnosed as a faulty
capacitor by the highly-trained and competent engineering staff.
  -- Things That Never Happen in "Star Trek" #9
 
Change 28231 by davem@​davem-splatty on 2006/05/19 00​:14​:15

  [perl #39141] lots of warnings with diagnostics and (warn or die)
  stop C<use diagnostics; warn "\n"> outputing lots of 'uninit'
  warnings.

Affected files ...

... //depot/perl/lib/diagnostics.pm#39 edit

Differences ...

==== //depot/perl/lib/diagnostics.pm#39 (xtext) ====

@​@​ -562,6 +562,7 @​@​
  # but be aware of messsages containing " at this-or-that"
  my $real = 0;
  my @​secs = split( / at / );
+ return unless @​secs;
  $_ = $secs[0];
  for my $i ( 1..$#secs ){
  if( $secs[$i] =~ /.+? (?​:line|chunk) \d+/ ){

@p5pRT
Copy link
Author

p5pRT commented May 19, 2006

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented May 19, 2006

@iabyn - Status changed from 'open' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant