Module::Install does not use a separate file, it uses Makefile.PL, it just has a different API.
Because Module::Install does not come with standard Perl, it works differnt then
ExtUtils::MakeMaker.

On the development machine, where you work on the module and where you would like to release it, you'll
need to install Module::Install but when you
package your module a part of Module::Install will be included in your distribution in the inc/
subdirectory. When someone tries to install this distribution, perl will automaticall use this copy
of Module::Install.

license is the type of license the code has. perl would mean the "perl license".

author is the name and the e-mail of the person who created the module.

all_from tells where to get the version number and the abstract of the distribution from. This usually points at the
main module.

requires can be issued multiple times. Each time it gets a either a single value, a name of a module, or
a key-value pair. A name of a module and a mimimum version number.
This is the list of prerequisites. If only the name of the required module is given then we don't care which version
of that module.

One of the requirements in this example is only relevant on MS Windows. Therefore, we check
the $^O variable that indicates the operating system, and only if it is Windows, only
then do we call the requires function.

requires 'Win32' => '0.31' if $^O =~ /win32/i;

test_requires helps you list the modules that are needed when testing the module even though they are not needed
for the actual use of the module.

The keywords homepage, bugtracker, repository help the user declare various other resources
for this distribution. The information provided here will be added to the META files (META.yml and META.json) and
then they will be used by the various displying system, such as MetaCPAN to
link to these resources.