It might be more helpful to return shuffled ints between $start and $end, even if $num < $range. The user just won't get back $num ints. Perhaps the $range+1 returned value could be "Range too small."
As for shuffle vs. rand, "use Benchmark". :-) See if there's a predictable threshold where one overtakes the other.
Update: Is the ratio between $num and $range significant when determining whether a shuffle or rand is better to use? It would seems that a very small $num:$range ratio would benefit from rand, where shuffle-ing is better as $num:$range -> 1.
Or am I speaking from a non-standard orifice?