in reply to How to get 0 to initialize a value

When I run your code I do not get the warnings you mention, but this line:
my $first_novel = $novel_list->[$first_book];
does give a warning fatal error (praise be to monk of anomaly). @novel_list is a plain array not an array reference - it should be:
my $first_novel = $novel_list[$first_book];