Your first snippet of:
our $is_magick = 0;
eval 'require GD';
if ($@) {
# problems with GD, fall back to non-GD
} else {
# we have GD, go for it!
$is_magick = 1;
}
works exactly as you want, when run as written above. $is_magick is set to 0 if GD is not available and 1 if GD is available.
That suggests that there's something about your implementation of this snippet in your module or program that prevents it from working.
Can you provide a sample of code that you have written which demonstrates erroneous behaviour?