Net :: LDAPを使用していくつかのLDAPクエリの結果を含むcsvファイルを生成するスクリプトを作成しようとしていますが、属性配列は空です。ldapの結果をcsvに解析するのに役立つ
my @attributes = ('cn', 'mail', 'telephoneNumber');
ユーザーがリストされているにメール、または全くtelephoneNumberの列挙されていないのであれば、たとえば、それが代わりに返すの保持フィールド飛ばしてください:
"Foo Bar",, # this line should be skipped since there is no mail nor telephone
"Bar Foo","[email protected]", # this line should be skipped too, no number listed
"John Dever","[email protected]","12345657" # this one is fine, has all values
私のループを、今はこのように見ています:
# Now dump all found entries
while (my $entry = $mesg->shift_entry()){
# Retrieve each fields value and print it
# if attr is multivalued, separate each value
my $current_line = ""; # prepare fresh line
foreach my $a (@attributes) {
if ($entry->exists($a)) {
my $attr = $entry->get_value($a, 'asref' => 1);
my @values = @$attr;
my $val_str = "";
if (!$singleval) {
# retrieve all values and separate them via $mvsep
foreach my $val (@values) {
if ($val eq "") { print "empty"; }
$val_str = "$val_str$val$mvsep"; # add all values to field
}
$val_str =~ s/\Q$mvsep\E$//; # eat last MV-Separator
} else {
$val_str = shift(@values); # user wants only the first value
}
$current_line .= $fieldquot.$val_str.$fieldquot; # add field data to current line
}
$current_line .= $fieldsep; # close field and add to current line
}
$current_line =~ s/\Q$fieldsep\E$//; # eat last $fieldsep
print "$current_line\n"; # print line
}
私が試してみましたコードのよう:
if ($attr == "") { next; }
if (length($attr) == 0) { next; }
など、運がないものもあります。私はまた単純なif(){print "isempty"; }デバッグテストとその動作しません。私はこれをどうやってすることができるのかどうか確かめていません。
私が間違っていることを教えていただけると助けてください。
ご協力いただきありがとうございます。
UPDATE:カオス要求ごと
:
my $singleval = 0;
このプログラムのサンプル実行を返します:
Jonathan Hill,[email protected],7883
John Williams,[email protected],3453
Template OAP,,
Test Account,,
Template Contracts,,
それでは、私がやりたいと、そのすべての行をスキップすることです電子メールまたは内線番号のフィールドが欠落しています。
whileループにラベルを付け、次のレコードを使用することをお勧めしましたが、$ attrがまだ空のフィールドでこれらの行を印刷していない限り、私はあなたの提案を試みました。 ご意見ありがとうございます。私はperlに慣れていないので、数値以外の値に対して==の代わりにeqを使用しなければならないことに気付かなかった。ヒントをありがとう! –
ようこそ。あなたのコードをもっと詳しく見ると、$ attrは配列リファレンスであるため、常に真です。 @ $ attrを除いて次のレコードを試してください。 – chaos
私はエラーがどこか他の場所だと思うので、(も、(@ $ attr eq ""){print "empty";}とその印刷されていない空白のいずれかでした。 –