You can read some of the differences in this old perlfaq.
Just imagine trying to build a scalable system without lexical variables! When I did that in COBOL, we had horrible variable names like WS-GLJ0030R-ACCT-LIMIT to avoid collisions. Real fun! Oh, and in Perl 4, you had true globals by forcing variables whose names began with underscores into main::. This is often a convenience and you can see remants of this with variables like $_, $1, and so on. However, for programming larger systems, encouraging user-supplied globals is bad.