This is where you do see the origins of Perl as “a scripting language.” You will, in the end, “invoke some ‘script’ (a .pl file),” and this file will “simply consist of” some set of executable statements, which will be executed. In effect, then, this file, in its entirety, is your void main().
Modern-day Perl is, however, “a modular language,” so it is quite to be expected that your “.pl file” will mostly consist of use xxx; statements (thereby referring to xxx.pm files that are to be found somewhere in the @INC search-list ...) such that most of the actual meat-and-potatoes of the total application will actually be found there.
In the Perl language (and its many brethren ...) you certainly can see a very sharp distinction with the world of pure-compiled languages such as C(++) ... a great many more things happen “on the fly,” and it’s okay, because, all-the-time and throughout everything, “the Perl interpreter is there,” and its magnificent perlguts. We stand on the shoulders of giants.