in reply to Troubleshooting perl runtime errors

Using perl 5.10 I get the 'Use of uninitialized value in sprintf at <script> line <line>.' only if $DIcas_text string specifies more values then @HR actually contains. If a value in @HR is undefined or the format string is undefined I get a different error message.

#!/usr/bin/perl use strict; use warnings; my ($DIcas_text, @HR, $s); $DIcas_text = "%s %s %s %s"; @HR = qw(a b c); $s = sprintf($DIcas_text, @HR); $DIcas_text = "%s %s %s"; @HR = ('a', undef, 'c'); $s = sprintf($DIcas_text, @HR); $DIcas_text = undef; @HR = qw(a b c); $s = sprintf($DIcas_text, @HR);

output

Use of uninitialized value in sprintf at /tmp/u.pl line 10. Use of uninitialized value $HR[1] in sprintf at /tmp/u.pl line 14. Use of uninitialized value $DIcas_text in sprintf at /tmp/u.pl line 18 +.

If you get something similar with Perl 5.8 then this might help to figure out what exactly is wrong.

Replies are listed 'Best First'.
Re^2: Troubleshooting perl runtime errors
by hippo (Archbishop) on Nov 16, 2016 at 16:10 UTC
    If you get something similar with Perl 5.8 then this might help to figure out what exactly is wrong.

    Alas not. The extra data you see is missing from 5.8.8:

    $ perl -v This is perl, v5.8.8 built for x86_64-linux-thread-multi Copyright 1987-2006, Larry Wall Perl may be copied only under the terms of either the Artistic License + or the GNU General Public License, which may be found in the Perl 5 source ki +t. Complete documentation for Perl, including FAQ lists, should be found +on this system using "man perl" or "perldoc perl". If you have access to + the Internet, point your browser at http://www.perl.org/, the Perl Home Pa +ge. $ cat uninit.pl #!/usr/bin/perl use strict; use warnings; my ($DIcas_text, @HR, $s); $DIcas_text = "%s %s %s %s"; @HR = qw(a b c); $s = sprintf($DIcas_text, @HR); $DIcas_text = "%s %s %s"; @HR = ('a', undef, 'c'); $s = sprintf($DIcas_text, @HR); $DIcas_text = undef; @HR = qw(a b c); $s = sprintf($DIcas_text, @HR); $ ./uninit.pl Use of uninitialized value in sprintf at ./uninit.pl line 10. Use of uninitialized value in sprintf at ./uninit.pl line 14. Use of uninitialized value in sprintf at ./uninit.pl line 18.
      That's a pity. Thanks for verifying!