У меня есть куча адресов в базе данных LDAP, и я хочу удалить улицу.Для этого я должен удалить дома в первую очередь.Вывод базы данных LDAP не отсортирован
my @x1=("c=NL",
"nr=1,s=Dam,a=AMS,c=NL",
"s=Dam,a=AMS,c=NL",
"a=AMS,c=NL",
"nr=3,s=Plein,a=AMS,c=NL",
"s=Plein,a=AMS,c=NL",
"nr=2,s=Dam,a=AMS,c=NL" );
Прежде чем мы сможем удалить 's = Dam', мы должны удалить 'nr = 1, s = Dam, a = AMS, c = NL' и "nr = 2, s = Dam, a = AMS, c = NL ", прежде чем мы сможем удалить" s = Dam, a = AMS, c = NL "
В качестве направления я выбрал сортировку строк от конца доспереди, поэтому сначала «c = NL», затем «a = AMS» и так далее.И затем пробег через массив, если он содержал «s = Dam, a = AMS, c = NL».
В результате должен выглядеть, как:
'nr=2,s=Dam,a=AMS,c=NL'
'nr=1,s=Dam,a=AMS,c=NL'
's=Dam,a=AMS,c=NL'
Я добавил Data :: Dumper в код, чтобы показать, что происходит
my @x1=("c=NL",
"nr=1,s=Dam,a=AMS,c=NL",
"s=Dam,a=AMS,c=NL",
"a=AMS,c=NL",
"nr=3,s=Plein,a=AMS,c=NL",
"s=Plein,a=AMS,c=NL",
"nr=2,s=Dam,a=AMS,c=NL" );
print Data::Dumper->Dump([\@x1],['*x1']);
my @x2=split( "\n", reverse join ("\n", @x1));
print Data::Dumper->Dump([\@x2],['*x2']);
my @x3=sort @x2;
print Data::Dumper->Dump([\@x3],['*x3']);
my @x4=split( "\n", reverse join ("\n", @x3));
print Data::Dumper->Dump([\@x4],['*x4']);
foreach (@x4) {
# if matches from the rear: "s=Dam,a=AMS,c=NL", do stuff
}
это результат
@x1 = (
'c=NL',
'nr=1,s=Dam,a=AMS,c=NL',
's=Dam,a=AMS,c=NL',
'a=AMS,c=NL',
'nr=3,s=Plein,a=AMS,c=NL',
's=Plein,a=AMS,c=NL',
'nr=2,s=Dam,a=AMS,c=NL'
); @x2 = (
'LN=c,SMA=a,maD=s,2=rn',
'LN=c,SMA=a,nielP=s',
'LN=c,SMA=a,nielP=s,3=rn',
'LN=c,SMA=a',
'LN=c,SMA=a,maD=s',
'LN=c,SMA=a,maD=s,1=rn',
'LN=c'
); @x3 = (
'LN=c',
'LN=c,SMA=a',
'LN=c,SMA=a,maD=s',
'LN=c,SMA=a,maD=s,1=rn',
'LN=c,SMA=a,maD=s,2=rn',
'LN=c,SMA=a,nielP=s',
'LN=c,SMA=a,nielP=s,3=rn'
); @x4 = (
'nr=3,s=Plein,a=AMS,c=NL',
's=Plein,a=AMS,c=NL',
'nr=2,s=Dam,a=AMS,c=NL',
'nr=1,s=Dam,a=AMS,c=NL',
's=Dam,a=AMS,c=NL',
'a=AMS,c=NL',
'c=NL'
);
Можно ли улучшить этот код, чтобы код мог быть более читабельным,