All,
Every now and then I try to think of ideas for
Obfuscated code. I seldom follow through, but it is often a great learning exercise. Consider the following code:
#!/usr/bin/perl
use strict;
use warnings;
sub jump {
my $place = 'START';
goto $place;
}
START:
print "Hello, world\n";
jump();
As you might expect, this creates an infinite loop. I wondered what might happen if $place were a tied variable that instead of fetching a value - did a goto elsewhere. Would the original goto ever get called?
#!/usr/bin/perl
use strict;
use warnings;
sub jump {
tie my $place, 'main';
goto $place;
}
START:
print "Hello, world\n";
jump();
print "I am jumping over this spot\n";
END:
print "Goodbye, cruel world\n";
sub TIESCALAR { bless {}, $_[0] }
sub STORE { print "Read only\n"; }
sub FETCH { goto END; }
This dies yelling about
Can't find label END at ... First, I know that Perl supports goto label out of a sub as demonstrated by the first snippet. Second, I can't find anything in
goto docs that would suggest this shouldn't work. Can anyone shed some light?