Disclaimer: I've never used CGI.pm
The snippet 'src' => [ $_css_path, $_css_path2 ] is using an anonymous array, whereas 'src' => @whatever is using a normal array. Perhaps it will work if you use an array reference to an anonymous array like this:
$whatever = [ $_css_path, $_css_path2 ];
-style => { -code => $page_style, src => $whatever }, #....
For the second part of your question, new paths can be pushed with:
push @{ $whatever }, $_css_path3;
Of course, this will need to be done before print start_html();