in reply to Can't call on undefined value (DBI) + constructive feedback asked.

There are a few things about your code as posted that seem odd (i.e. not good):

Also, it looks like the usage is just a matter of providing a single number between 1 and 10. It would make more sense to have that as a command-line arg:

my $Usage = <<ENDUSE; Usage: $0 N where N is a number between 1 and 10: 1 : Alzheimer disease 2 : Bardet Biedl 3 : Breast cancer ... ENDUSE die $Usage unless ( @ARGV == 1 and $ARGV[0] =~ /^\d+$/ and $ARGV[0] > 0 and #ARGV[0] < 11 ); my $choice = shift; ...
This way, it's easier to run the script either interactively or from another process, because the information that the script needs from the user is part of the command line.