The warning normally would be an error, but there was a bug in some old perl versions so that using %x->{} would be accepted. Since a lot of scripts inadvertently had used this bug (i.e. made a mistake that couldn't be found because the interpreter still did the right thing) the bug only received a warning so that those old scripts don't break.