in reply to what does main->{x} = 1 do?

That's a very nasty side effect and I've experienced that "feature" in a code. And it's also not easy to detect. Imagine you have an X class and you can access it's methods via $o = X->new; But since X does not use strict, you can also access them as static methods like X->foo(123) and if foo() is like this:
sub foo { my $self = shift; $self->{bar} = shift; $self->{bar} }
it will succeed. And if you're inheriting several levels from that X class..? I think that every code that does not use strict must be forced to use it. Especially if the code is a CPAN module. There are several modules that do not use strict I think...