-my %fail = map { $_ => 1 } 2, 3, 5, 7;
-my %failed;
-my $extra_fail = 0;
+{
+ my $code = do { local $/; <DATA> };
+ my (%res, $num, @left);
+ {
+ local $SIG{__WARN__} = sub {
+ ++$num;
+ my $w = join '', 'warn:', @_;
+ if ($w =~ /"P(\d+)"/ and not exists $res{$1}) {
+ $res{$1} = $w;
+ } else {
+ push @left, "[$num] $w";
+ }
+ };
+ eval "die qq{ok\\n}; $code";
+ is($@, "ok\n", 'DATA compiled fine');
+ }
+ for (1 .. $tests) {
+ my $w = $res{$_};
+ if ($wrong{$_}) {
+ like($w, expect("P$_"), "$_ should warn");
+ } else {
+ is($w, undef, "$_ shouldn't warn");
+ }
+ }
+ is(@left, 0, 'nothing left');
+ diag "Extraneous warnings:\n", @left if @left;
+}