#!/usr/bin/perl -w
use strict;
my $list = '
FUD() => "()", "FUD" => "str", FUD => "bare", -FUD => "-", +FUD =>
+ "+",
';
sub FUD { 'fud' }
for( 0 .. 1 ) {
my @a = eval $list;
print "@a\n";
last if $_;
undef &FUD;
eval 'sub FUD() { "dud" }';
}
__END__
fud () FUD str FUD bare -FUD - FUD +
dud () FUD str FUD bare -FUD - FUD +
While the FUD() case always calls the function (and thus gives 'fud' then 'dud') and the "FUD" case always doesn't call the function (and thus always gives 'FUD'), the other bareword cases are affected by whether or not a prototype is used and so give the follow inconsistent results:
FUD +FUD -FUD
----- ----- ------
w/ prototype: FUD FUD -FUD
w/o prototype: FUD FUD -FUD
Happy debugging!
Like anybody could possibly debug such wily inconsistency! So funny.
Update: Sorry, I accidentally reversed the "w/" vs "w/o" labels in the above table. Sorry for the confusion that must have caused.
|