将字符串的字符设置为第一个"."

dut*_*irf 1 string perl split

我正在尝试使用Perl的gethostnamebyaddr功能.令人讨厌的是它以标量格式返回整个域名.我想只解析主机名并丢弃其余的主机名.

我正在使用split将域名划分为一个数组,然后只取第一个值,但这似乎不起作用.

#!/usr/bin/perl

use Socket;

my $name;
my $hostname;
my @tmpStr;

$name  = gethostbyaddr(inet_aton("192.168.2.3"), AF_INET);
print "$name\n";

@tmpStr = split ".", $name;
$hostname = $tmpStr[0];
print "Host name is $hostname\n";
Run Code Online (Sandbox Code Playgroud)

执行上面的代码时,我得到以下内容:

dc1-ent.ent.ped.local 
Host name is
Run Code Online (Sandbox Code Playgroud)

根据这个网站,返回值不是一个字符串,而是一个标量值,所以我分裂它的尝试不起作用.

在我可以拆分它或自己解析出主机名之前,我无法弄清楚如何将它转换为字符串.

too*_*lic 7

点字符对于Perl中的正则表达式具有特殊含义,而split的第一个参数是正则表达式.你需要逃避点:

use warnings;
use strict;

my $name = 'dc1-ent.ent.ped.local';
print "$name\n";
my @tmpStr = split /\./, $name;
my $hostname = $tmpStr[0];
print "Host name is $hostname\n";
Run Code Online (Sandbox Code Playgroud)

这输出:

dc1-ent.ent.ped.local
Host name is dc1-ent
Run Code Online (Sandbox Code Playgroud)