# a little tricky
print "\ntrick one\n";
sub ::0 { print "::0 called\n" }
%42->();
# a little more tricky, think about implicit return values
print "\ntrick two\n";
sub :: { print ":: called\n" }
sub ::1{ print "::1 called\n" }
::->();
# and think about evaluation order
print "\ntrick three\n";
sub _ {print "_ called\n"}
_ _ -> ();
# another trick that eliminates white space in sub declarations
print "\ntrick four\n";
sub'x{print "x called\n"}
x;
####
sub _ { print "perl "; ::->() }
sub :: { print "hacker\n"}
sub ::1 { _ print "another "}
sub ::0 { print "just " }
1->(%1->());
##
##
sub :: { print "hacker\n"}
sub _ { print "perl "; ::->() }
sub ::1 { _ print "another "}
sub ::0 { print "just " }
1->(%1->());