Thanks, Rob, Eric, and Patrick! I am checking out your solutions, hoping my problem will be solved.
I have another question: my Perl code with embedded C runs fine on one UNIX workstation, but when my colleague runs it, the system complains that cc in some directory couldn't be found. What could be the problem? (He has the same path environment var as mine.) Thanks! Steven -----Original Message----- From: Eric Wilhelm [mailto:[EMAIL PROTECTED] Sent: Monday, March 22, 2004 8:11 PM To: [EMAIL PROTECTED] Subject: Re: How do I disable modules in a script # The following was supposedly scribed by # Sisyphus # on Monday 22 March 2004 09:31 pm: |use warnings; | |BEGIN { | eval{require Inline::C}; | if($@) { | print "No Inline::C here\n"; | # do whatever you want | exit; | } | } | |use Inline C => <<'EOC'; | |void got_it() { | printf("We have Inline::C\n"); | } | |EOC | |got_it(); | |__END__ | |Seems to work as you want. As it is it prints "We have Inline::C". If I |change all occurrences of 'Inline::C' (and 'Inline C') to 'Inline::D' |(and 'Inline D') then it prints "No Inline::D here" and quietly exits. Sounds about right, except I think the OP wanted to do something besides exit if Inline::C is not available. Usually, you would have a require() statement for this sort of thing, since those don't get caught at compile time (trouble with use() is that the interpreter wil find it anywhere.) This won't work: require Inline C => <<'EOC'; So, you would have to call the import routine directly: BEGIN { eval{require Inline::C}; if($@) { print "No Inline::C here\n"; # do whatever you want exit; } else { Inline::import(Inline, C => <<'EOC' void got_it() { printf("we have inline::C\n"); } EOC ); } } Example: you've written a function (or class) in both C and Perl, and the C one is faster, but you want the Pure Perl one to be available as a fallback. You could also put the 'use Inline C => $code' line inside of an eval, or (maybe a better plan) write two modules and do an eval {require } on each in turn. The one which contains 'use Inline::C' will fail the require, so you can fall-back on the pure-perl one in an else{} block. Of course, as Rob has demonstrated, you need to do all of this fancy stuff in a BEGIN block. --Eric