我使用XML :: Simple來分析xml文件。Perl:來自變量的grep唯一值
my $servers = XMLin('file.xml');
for my $server (@{$servers->{server}}) {
my %seen =();
my $node = $server->{NodeName} . "\n";
my $lanip = $server->{LanIP} . "\n";
my $mask = $server->{Netmask} . "\n";
substr($lanip, 11, 3) = "0";
print "$lanip\n";
}
的輸出這裏是像下面
192.169.30.0
192.169.30.0
192.169.30.0
192.169.30.0
192.169.30.0
192.169.30.0
192.169.30.0
192.169.31.0
192.169.31.0
192.169.31.0
192.169.32.0
192.169.72.0
192.169.72.0
192.169.72.0
192.169.32.0
192.169.32.0
在這裏,我只希望到grep獨特的價值觀,但我已經嘗試了很多事情,但似乎沒有任何工作。
我用下面的方法
use List::MoreUtils qw(uniq);
my @unique = uniq $lanip;
也是這個
my @unique = do { my %seen; grep { !$seen{$_}++ } $lanip };
也是這個
print $lanip . "\n" if ! $seen{$lanip}++
是否有人可以幫助我在這裏。
'$ lanip'是一個包含所有IP的字符串嗎?目前尚不清楚你的問題。我認爲它是根據代碼示例,它似乎包含一個IP。 –
您應該在數組上使用'uniq',而不是字符串。例如:'perl -MList :: MoreUtils = uniq -E'@ a = qw(192.169.30.0 192.169.30.0 192.169.31.0);說$ _ for uniq @a;'' –
如果'%seen'被聲明在循環之外,那麼你最後的嘗試應該可以工作:'my%seen;爲我的$服務器(@ {$服務器 - > {服務器}}){...' – melpomene