linux运行perl脚本,linux运行perl脚本_将Perl脚本从Solaris移植到Linux

linux运行perl脚本

随着可视化技术的进步,企业正在将物理服务器整合到虚拟化环境中,从而在减少功耗和物理空间的同时改善资产管理。 在某些情况下,整合运动涉及从旧操作系统迁移到可以提供更轻松的系统维护或其他总拥有成本收益的操作系统。

如果您打算从Solaris迁移到Linux,则几乎所有的自定义代码(包括C,shell脚本,Perl等)都需要某种补救措施 ,即映射属性的“重新对齐”,这是由于平台的差异而引起的。 。

没有时间阅读这篇文章?

这是将Perl脚本从Solaris迁移到Linux时要注意的五个最常见的“陷阱”:

平台特定的Perl模块依赖性  操作系统命令和IPC(进程间通信)  利用操作系统路径名  包含平台特定信息的特殊变量  跨平台实现不同或未实现的功能

而且,Perl与其他语言没有什么不同-尽管程序本身可以在平台之间移植,并且您只需要安装一个解释器即可在目标系统上运行代码-可能会出现一些补救类型的问题。 特定于Solaris的资源,尤其是操作系统路径名,系统命令和Perl模块,通常会在代码中得到利用。 因此,您应该期望必须进行一些代码补救,以确保Perl脚本在迁移后能够按预期工作。

但是,什么Perl语法构造以及您最应注意哪些运算符? 在本文中,我们解释了最常见的可移植性陷阱,并提出了将Perl脚本从Solaris迁移到Linux的路线图。 您可能会使用本文中关于从大多数UNIX操作系统(包括AIX,HP / UX等)迁移到Linux的路线图; 但是,所有示例,示例代码和参考都集中于从Solaris到Linux的迁移。

Perl可移植性问题

您应该检查Perl脚本上引用的资源,以确保在Linux系统上运行Solaris特定代码时不会出现问题。 例如,考虑一个脚本,该脚本从仅在Solaris上遇到的文件中提取信息。 想象执行一个使用Linux上没有的标志的系统命令。

根据可访问性或参考性,大多数可移植性问题可分为五类,如表1所示。

表1. Perl脚本中的可移植性问题的类别

类  可移植性问题  01  平台特定的Perl模块依赖性  02  操作系统命令和IPC(进程间通信)  03  利用操作系统路径名  04  使用包含平台特定信息的特殊变量  05  跨平台实现不同或未实现的功能

表1中列出的类并不是所有可移植性问题的权威列表,而只是最常见的问题。 有关可移植性问题的更多详细信息,请查看Perl编程文档(请参阅参考资料中的链接)。

完善Perl移植的五个步骤

让我们看一下将Perl脚本从Solaris移植到Linux的路线图。 此路线图建立在表1中的可移植性问题类别的基础上。该路线图包括五个步骤,每个步骤着眼于表1中的类别之一; 每个步骤都会确定Perl语法构造或运算符可能需要某种代码补救的问题。

步骤1.检查特定于Solaris的模块依赖性

第一步就是检查导入的Perl模块。 其中一些是专门为Solaris构建的,启用它们后,它们会将脚本绑定到Solaris平台。 我们需要通过脚本代码来识别这些模块,找出它们所利用的功能和变量,并进行适当的更改,以使它们不会将您束缚在未运行Perl脚本的平台上。

您可以在CPAN信息库中找到特定于Solaris的模块的完整列表 。 它们的名称通常以Solaris ::或Sun :: Solaris ::开头。

您可以使用清单1中的shell脚本,该脚本可用于使用以“ Solaris”或“ Sun”开头的导入语句来标识Perl脚本文件。

清单1.如何查找Solaris模块导入

#!/bin/bash

find . -name "*.pl" -exec grep -ilP "^\s*use (Solaris|Sun)" {} \;

您可以修改清单1中的代码,以使该脚本在Perl脚本中查找特定于Solaris的模块时更加准确。 例如,您可以将清单1中的shell脚本转换为Perl,从而利用PPI模块进行解析。 该模块的使用超出了本文的范围,但是我们建议在解析Perl代码时使用它以提高准确性。

在使用Solaris特定代码标识脚本之后,您需要搜索在Linux上也可以使用的等效模块。 从功能上识别此类模块并不总是那么容易,因为原始模块可能会处理Solaris平台专有的技术。 发生这种情况时,您将必须执行更深入的分析。

要使用等效的基于Linux的模块,您需要用新模块的等效项替换所有import语句以及所有被调用的函数和变量 。

步骤2.检查对Solaris特定系统命令的调用

当执行Solaris到Linux的迁移时,从Perl脚本中调用操作系统命令可能会出现最常见的问题:

目标系统上缺少命令  具有不同标志集的命令  在两个平台上行为不同的命令

因此,在处理此问题(类号02可移植性问题:系统调用)时,您需要格外小心。

此处的目标是确保在语法上和语义上在脚本上引发的任何系统命令在Linux上也能正常工作。 简而言之,这就是识别带有Solaris特定系统命令的脚本中所利用的Perl核心功能和运算符。

让我们从一个例子开始。 清单2显示了一个简单的Perl脚本,用于显示Solaris系统的内存大小。

清单2.显示系统内存大小的Perl脚本

#!/usr/bin/perl

my $mem_info = `prtconf | grep Memory`;

my (undef, $mem_size) = split(':', $mem_info);

($mem_size, undef) = split(' ', $mem_size);

print "Memory size is: ".$mem_size."\n";

现在,假设我们要在Linux上运行相同的脚本。 我们发现它通过backtick运算符调用了管道系统命令( prtconf | grep Memory ),而prtconf命令特定于Solaris。 第一步是找到它的替代品。

您可以使用cat /proc/meminfo | grep MemTotal cat /proc/meminfo | grep MemTotal即使输出格式不同,因为/proc/meminfo保留大小信息以KB为单位,而prtconf以MB为单位。

要修复此脚本,可以将ptrconf cat /proc/meminfo替换为ptrconf ,但是将输出信息保留为MB(我们不知道此脚本的输出是否用作其他脚本的输入,因此,不要更改它至关重要它),我们可以使用简单的转换。 清单3显示了如何修复此脚本的示例。

清单3.修复清单2脚本

#!/usr/bin/perl

my $mem_info = `cat /proc/meminfo | grep MemTotal`;

my (undef, $mem_size) = split(':', $mem_info);

($mem_size, undef) = split(' ', $mem_size);

$mem_size = int($mem_size / 1000);

print "Memory size is: ".$mem_size."\n";

由于Perl具有足够的灵活性以适应执行操作系统命令的不同方式,因此有许多不同的核心功能和运算符用于该目的。 表2列出了可用于从Perl脚本中调用系统命令的Perl核心功能和运算符。

表2.用来调用系统命令的核心功能和运算符

功能/操作员  Solaris中的示例  Linux中的示例  反引号( `` )  `prstat`  `ps -e`  系统  system("psrinfo")  system("cat","/proc/cpuinfo")  执行  exec("/usr/sbin/df -kZ")  exec("/bin/df -kZ")  x  qx/"metastat"/  qx/"lvdisplay"/  打开  open DATA, "cat /var/cron/log |"  Open DATA, "cat /var/log/cron"  阅读管  readpipe( "cat /etc/default/login " )  Readpipe( "cat /etc/default/login" )

您可以检查Perl文档以获取有关这些功能和运算符以及不属于Perl核心语言的任何其他功能的进一步信息。 请查阅IBM红皮书“从Solaris到Linux的迁移:系统管理员指南 ”,以了解有关系统管理命令差异的更多信息。

步骤3.检查OS路径名的使用

现在让我们讨论通过Perl脚本迁移杠杆路径名。 此步骤类似于步骤2。在这里,您需要注意用于打开或操作文件的语法元素和运算符。 尽管有特定的运算符可以执行此操作,但是引用路径名可能会出现一些问题。 (调用第2步中提到的系统命令时,也可以看到此信息。)

清单4显示了一个小的脚本,该脚本读取Solaris的NFS服务器配置文件并将其打印到标准输出。

清单4.将系统文件的内容打印到标准输出的Perl脚本

#!/usr/bin/perl

open(NFSCONF, '/etc/default/nfs');

print ;

close(NFSCONF);

从Solaris迁移到Linux时,您需要注意通常不同的系统路径。 在此示例中,此Solaris脚本上引用的文件/etc/default/nfs在Linux / Red Hat发行版中不存在,但是可以用/etc/sysconfig/nfs替换。 清单5显示了在脚本被修复后的脚本。

清单5.清单4的修复

#!/usr/bin/perl

open(NFSCONF, '/etc/sysconfig/nfs');

print ;

close(NFSCONF);

您需要了解任何操纵文件的Perl命令。 表3显示了Perl中使用的一些常见路径处理命令。 如果脚本中正在使用其中任何一个,则在迁移时需要修正路径名。

表3. Perl中的常见路径处理命令

命令  描述  chdir  更改工作目录。  chmod  更改文件列表的权限。  glob  返回文件名扩展的列表(可能为空)。  link  创建链接到旧文件名的新文件名。  mkdir  创建一个新目录。  open  打开一个文件。  opendir  打开目录。  rename  更改文件名。  rmdir  删除指定目录。  sysopen  打开指定的文件,并将其与指定的文件句柄关联。

步骤4.检查包含Solaris特定信息的特殊变量的使用

一些特殊变量保存有关Solaris特定环境的信息。 您需要识别这些变量并进行正确的翻译。 表4列出了一些可能包含Solaris特定信息或参考的核心变量。

表4.一些Perl核心变量; 在Perl编程文档中查看所有内容

变量  描述  ENV  包含当前环境变量。 其中一些变量可能不支持Solaris和Linux之间的直接映射。 一些示例是变量NETPATH,MSGVERB和SEV_LEVEL。  SIG  包含信号的信号处理程序。 请参阅相关主题有关这两个平台上的信号差异的详细信息部分。

步骤5.识别在跨平台上实现不同的功能的使用

一些Perl核心功能未实现或在各种平台上实现方式有所不同。 这些功能在Solaris和Linux上的行为会有所不同。 您将需要对其进行更改,以便他们合作或找到Linux平台的互补版本并锁定到该版本中。 再次,请参见《 Perl编程文档》( 有关链接,请参见参考资料)。

结论

确定从Solaris迁移到Linux(或从HP / UX或AIX迁移到Linux)时可能引起麻烦的Perl脚本的五个最常见组件并不难。 但是,进行必要的代码修复和代码替换以成功将脚本引入Linux可能会很耗时,尤其是在您要迁移许多脚本的情况下。 本文中有关代码补救的建议和示例应该可以帮助您入门。 祝好运!

翻译自: https://www.ibm.com/developerworks/opensource/library/l-port-perl/index.html

linux运行perl脚本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值