in reply to Re: require different modules per OS?
in thread require different modules per OS?

I downvoted for the string eval. Don't use string eval unless necessary.

If you want to do something which is not easy enough to write with the if module, you can still use require in a begin-block:

BEGIN { if ($^O =~ /win32/) { require Win32::TieRegistry; import Win32 +::TieRegistry Delimiter=>"/", ArrayValues=>0; } }

Replies are listed 'Best First'.
Re^3: require different modules per OS?
by ikegami (Patriarch) on Nov 19, 2009 at 20:13 UTC

    I was wondering how eval EXPR compares. We have the following without eval EXPR:

    BEGIN { if ($^O =~ /win32/) { require Win32::TieRegistry; import Win32::TieRegistry Delimiter=>"/", ArrayValues=>0; } }

    The following would be the equivalent using eval EXPR and a minimal expression:

    BEGIN { if ($^O =~ /win32/) { my @import = ( Delimiter=>"/", ArrayValues=>0 ); eval "use Win32::TieRegistry \@import; 1" or die $@; } }

    Or if you extended the expression beyond the necessary:

    BEGIN { if ($^O =~ /win32/) { eval 'use Win32::TieRegistry Delimiter=>"/", ArrayValues=>0; 1 +' or die $@; } }

    So it looks like there's no gain from using eval EXPR.