代码之家  ›  专栏  ›  技术社区  ›  StrongWind

如何确保仅当脚本在Windows上运行时才加载模块?

  •  4
  • StrongWind  · 技术社区  · 10 年前

    我有一个需要在Windows和Linux上运行的Perl脚本。问题是我需要 use 仅适用于Windows的Perl模块。

    我已经尝试了以下内容,但仍然包括 WindowsStuff 包裹

    use strict;
    if ($^O eq 'MSWin32' ){
        use My::WindowsStuff;
    }
    use File::Basename;
    use Getopt::Long;
    ...
    ...
    
    1 回复  |  直到 10 年前
        1
  •  12
  •   Miguel Prz    10 年前

    因为 use 在编译时生效,它不尊重正在编译的代码的普通流控制。 特别是,将use放在条件的false分支中并不会阻止它被处理。

    你能做什么?

    a) require 导入(运行时):

    if( $^O eq 'MSWin32' ) {
       require My::WindowsStuff;
       My::WindowsStuff->import if My::WindowsStuff->can("import");
    }
    

    b) use if (编译时间):

    use if $^O eq 'MSWin32', "My::WindowsStuff";