我试图获取第一个数组中唯一元素的列表。 (AKA:第一个数组中不在第二个数组中的元素。)但是我的脚本返回唯一元素的数字而不是每个元素中的信息。
作为Perl的新手,我知道这种语言有很多细微差别。我还没有看到我如何得到一个数字而不是一个元素列表。我所看到的唯一研究是如何获得一些独特的元素,显然,我已经发现了另一种方式。
感谢任何帮助。以下是代码。
#!/usr/bin/perl
use strict;
use warnings;
use v5.10;
use XML:Simple;
use LWP::Simple;
use List::Compare;
my @upd = system ("perl test.pl | grep '*.x86_64.rpm'");
my @inst = system ("rpm -qa");
@inst = join( '.rpm', @inst);
my $ls = List::Compare->new( {lists=> [\@upd, \@inst]} );
my @list = $ls->get_unique;
@list = $ls->get_Lonly;
say "@list";
答案 0 :(得分:4)
@upd
包含一个元素,即执行perl test.pl | grep '*.x86_64.rpm'
的shell的退出状态。同样,@inst
包含一个元素,退出状态为rpm
。也许你试图捕获输出?使用反引号。
my @upd = `perl test.pl | grep '*.x86_64.rpm'`;
chomp(@upd);
my @inst = `rpm -qa`;
chomp(@inst);
此外,以下内容不正确:
@inst = join( '.rpm', @inst);
应该替换为以下内容:
$_ .= '.rpm' for @inst;
答案 1 :(得分:-3)
遍历列表并检查每个元素与第二个列表中的每个元素,如果它不在整个第二个列表中,则将其推送(或做任何事情)到新数组
#!/usr/bin/perl
use strict;
use warnings;
use v5.10;
my @upd = ('cat', 'dog','mouse', 'fatcatsrul');
my @inst = ('cat', 'dog', 'mouse');
my @unique_elements_in_upd;
foreach(@upd)
{
my $key= $_;
if(!($key ~~@inst))
{
push(@unique_elements_in_upd, $key);
print $key . "\n";
}
}
输出:fatcatsrul
看看这个 http://perlmaven.com/smart-matching-in-perl-5.10
也查看这个比较 How fast is Perl's smartmatch operator when searching for a scalar in an array?