Here's a new solution for question 3a. This is not strict in the
sense that you have to turn off strict for the set-up code
to work. However, the actual test \$foo->[1] == \$foo->{1}
runs under strict, unlike in my original symbolic ref solution.
I think that this solution differs from all the solutions
given so far, so I submit it even though this puzzle
is now quite old.
$R = "Regexp::"; *{"$R(\@{}"} = sub { &{sub{\@_}}(2,$t{1}) }; *{"$R(%{
+}"} = sub { \%t }; *{"$R()"} = sub {}; ${"${R}OVERLOAD"}{$(}--; our $
+foo = qr/a/; use strict; \$foo->[1] == \$foo->{1} or die;
And for super-search purposes, this solution uses
operator overloading on the Regexp package.