如何解决“常量标志”问题适用于 Perl 中的 Windows 和 Linux 客户端?
我正在使用以下 Linux 和 Windows perl 库,如下所示 -
Linux:
use Fcntl;
use File::FcntlLock
Windows:
use Win32::API;
use Win32API::File qw(:Func :Misc :FILE_:FILE_FLAG_ :FILE_SHARE_ :FILE_ATTRIBUTE_ :GENERIC_ )
因此,根据我用来运行脚本的主机(Linux 或 Windows),我正在加载包 -
my $linux_packages = "use Fcntl; use File::FcntlLock; use File::Copy;1;";
my $window_packages
= "use Win32::API; use Win32API::File qw(:Func :Misc :FILE_ "
. ":FILE_FLAG_ :FILE_SHARE_ :FILE_ATTRIBUTE_ :GENERIC_ );1;";
if ( $Hosttype =~ /unix/ ) {
eval "$linux_packages";
} elsif ( $Hosttype =~ /windows/ ) {
eval "$window_packages";
}
现在我正在尝试使用来自 Linux 或 Windows 客户端的标志,但如果我在 Linux 客户端上运行脚本,它会抛出 Windows 标志错误
SCRIPT ERROR: Bareword "GENERIC_READ" not allowed while "strict subs" in use
如果引用 GENERIC_READ,则使用它作为字符串而不是实际的标志,反之亦然。
如何解决?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您应该将自己代码的操作系统特定部分分解为呈现统一接口的单独模块,然后根据操作系统
需要
适当的模块。为此,您可以使用 Sys::Info::OS 和require 和 导入。类似以下内容(未经测试)的内容应该有效:
You should factor out operating system specific bits of your own code into separate modules that present a unified interface, and then
require
the appropriate module depending on operating system.To do that, you can use Sys::Info::OS and require and import. Something along the lines of the following (untested) should work: