This one was created to work with ActiveState Perl on Windows. Pass the --perl parameter to use it on other platforms.

Update:itub confirms my suspicions that eval isn't as accurate a test as the system route. Thanks for the explanation of why, itub! It's worth noting that the system call is the default approach in the code above.

Updates:

2005-07.Jul-26 : clarified preferred use of system over eval, thanks to itub

<-radiant.matrix->Larry Wall is Yoda: there is no try{} (ok, except in Perl6; way to ruin a joke, Larry! ;P)
The Code that can be seen is not the true Code"In any sufficiently large group of people, most are idiots" - Kaa's Law

Thanks for the port. :) It's not that I wrote a shell script; it was all done interactively. What I posted here was a reconstruction from looking at the shell history.

I don't think the 'eval' version is working properly, bacause the second time you call eval for the same module, it becomes effectively a no-op. You can make perl forget that it already included a module by deleting its entry from %INC (for example, delete $INC{'CGI.pm'}). That doesn't clean up the package, however, which sometimes leads to spurious warnings, and some modules may do strange things when their initialization code is run twice. It is trickier to delete the dependencies as well, to return to a "blank slate", but it should be possible. Maybe there's even a CPAN module for that. ;-)