避免在perl脚本中使用shell命令

时间:2017-05-24 10:02:33

标签: perl shell command

我的perl脚本中有这一行:

"$retrieveIps --fields FileserverIPS WHERE Fileserver LIKE '%NET%' | tr \" 
\" \"\n\" | xargs -n1 host";

以上这一部分:

$retrieveIps --fields FileserverIPS WHERE Fileserver LIKE '%NET%'

应该给我这个输出:

NodeName1.comp.com NodeName2.comp.com

我想尽可能避免在我的脚本中使用shell命令。 我想知道是否有办法做这个' tr' ,' xargs'和'主持人' perl命令? 我试着在网上看,但找不到对我有用的东西。

这是必需的输出:

10.0.0.1
10.0.0.2

1 个答案:

答案 0 :(得分:3)

您可以使用gethostbyname函数获取IP地址,并使用Socket :: inet_ntoa解压缩它:

use Socket;
my @hostnames
    = `$retrieveIps --fields FileserverIPS WHERE Fileserver LIKE '%NET%' `;
print inet_ntoa(scalar gethostbyname $_), "\n" for @hostnames;

inet_ntoa易于实施(但我不确定它是否适用于Perl 4):

sub inet_ntoa {
    my ($ip) = @_;
    return join '.', map ord, split //, $ip
}