BEGIN {
*call_to_inspect = ( rand() < 0.5
? sub ($) {}
: sub (@) {}
);
}
You can detect some changes in the compile-time state of a prototype by its effect on context.
BEGIN {
*call_to_query = ( rand() < 0.5
? sub ($) {}
: sub (@) {}
);
}
sub inspector { print wantarray ? 1 : 0, "\n" }
call_to_inspect(inspector());
Let's observe:
>perl a.pl
1
>perl a.pl
1
>perl a.pl
0
>perl a.pl
1
Therefore, there exists a function call in a program for which two instance of the Perl parser have different prototypes for the named function.
Therefore, there exists a program for which two instance of the Perl parser produce different output.
Or for short, Perl cannot be parsed.
|