Package: perl
Version: 5.14.2-7
Severity: normal

Very much simplified test case (I believe minimal) attached.

On my machine I get:

        Died at survey.cgi line 19.

instead of the expected
        foo at survey.cgi line 22
                        main::run_template(255490788292995187) called at 
survey.cgi line 18
                        eval {...} called at survey.cgi line 18
                        ...propagated at survey.cgi line 19.

because the plain die without arguments on line 19 isn't propagating the
error (originally, it was inside a few more evals and subroutines, but
this is much simpler).

Note that it works if:
        you change "confess" to "die"
        you substitute in the value in place of the CGI->param call

This brokeness is pretty fragile. Reducing down the several thousand
line program to this was a PITA, the brokeness kept vanishing.

-- System Information:
Debian Release: wheezy/sid
  APT prefers testing
  APT policy: (500, 'testing'), (200, 'unstable'), (150, 'stable'), (100, 
'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 3.1.0-1-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages perl depends on:
ii  libbz2-1.0    1.0.6-1
ii  libc6         2.13-26
ii  libdb5.1      5.1.29-1
ii  libgdbm3      1.8.3-10
ii  perl-base     5.14.2-7
ii  perl-modules  5.14.2-7
ii  zlib1g        1:1.2.6.dfsg-1

Versions of packages perl recommends:
ii  netbase  4.47

Versions of packages perl suggests:
ii  libterm-readline-gnu-perl   1.20-2+b1
ii  libterm-readline-perl-perl  1.0303-1
ii  make                        3.81-8.1
ii  perl-doc                    5.14.2-7

-- no debconf information
#!/usr/bin/perl -Tw

use Carp qw(confess);
use CGI;

my $CGI;

sub send_template;
sub run_template;

my $dat = <<DATA;
survey_no=255490788292995187
DATA
open my $fh, '<', \$dat or die "guess we don't have PerlIO";
$CGI = CGI->new($fh);
close $fh;

eval { run_template($CGI->param('survey_no')); };
die if $@;

sub run_template {
	confess "foo";
}

Reply via email to