People seem to be misunderstanding the point of my question. If you look at this code, you can see that there is a single line that may optionally be executed: the line that assigns $book to the static variable $closure_workbook. It's not worth explaining why, but I want to store $book in a static variable. And I see no reason that the one extra assignment should cause an error.
use strict;
use Excel::Writer::XLSX;
&func(@ARGV);
{
my $closure_workbook;
sub func {
my $file = 'perl.xlsx';
my $book = Excel::Writer::XLSX->new($file);
if (@_) {
$closure_workbook = $book;
}
my $worksheet = $book->add_worksheet();
$worksheet->write(0, 0, 'Hi Excel!');
}
}