you missed
attributes declaration:
print CGI->start_table({-border=>1, -cellspacing=>0, -cellpadding=>1})
This feature is documented is in CGI's manual (man CGI):
A large number of routines in CGI.pm actually aren’t specifically defined in the module,
but are generated automatically as needed. These are the "HTML shortcuts," routines
that generate HTML tags for use in dynamically-generated pages. HTML tags have
both attributes (the attribute="value" pairs within the tag itself) and contents
(the part between the opening and closing pairs.) To distinguish between attributes
and contents, CGI.pm uses the convention of passing HTML attributes as a hash reference
as the first argument, and the contents, if any, as any subsequent arguments.