You can also use Imager, which is far more easier to install than ImageMagick, has most of the features you will use 90% of the time, and is also easier to use, IMO.
The scale() method allows you to resize image with a maximum height or width. Or if it is not exactly what you want to do, you can still do maths with the getheight() and getwidth() methods.
my $image = Imager->new;
# Load the original image
$image->open(file => $ARGV)
or die $image->errstr;
# Get the dimensions of the picture
print "Size: ", $image->getwidth, 'x', $image->getheight, "\n";
# Scale the picture to at most 150px in width or height
my $resized = $image->scale( width => 150, height => 150, type => 'min
# Save the resized picture to disk
or die $resized->errstr;