消失,我認爲我的Perl是生鏽:)默認哈希鍵在Perl
這下面的腳本應該通過包含LDAP記錄文本文件的目錄遍歷特定用戶提取特定的信息。如果'productfamily'屬性不存在於文件中,我遇到了將'group'散列鍵從散列引用中刪除的問題。
#!/bin/perl
use strict;
use warnings;
use Data::Dumper;
use File::Basename;
sub extract_val {
my $line = shift;
return (split /\:/, $line)[1];
}
my @ldif_files = <tmp/*.ldif>;
my $line_ctr = 0;
my @record_ctr;
for my $ldif_file (@ldif_files) {
open my $fh,'<', $ldif_file or die "Cannot open file: $!";
my @contents = <$fh>;
close $fh;
my $user_record = {
'file' => basename $ldif_file,
'group' => 'BP',
'uid' => '',
'fname' => '',
'lname' => '',
'company' => '',
};
for my $line (@contents){
chomp $line;
$user_record->{'uid'} = extract_val($line) if $line =~ /^uid\:/;
$user_record->{'fname'} = extract_val($line) if $line =~ /^givenname\:/;
$user_record->{'lname'} = extract_val($line) if $line =~ /^sn\:/;
$user_record->{'company'} = extract_val($line) if $line =~ /^o\:/;
$user_record->{'group'} = 'EU' if $line =~ /^productfamily\:/;
}
print Dumper $user_record;
last if $line_ctr++ == 10;
}
輸出示例
下面是從輸出的兩個有代表性的樣品。
如果LDAP記錄中存在productfamily屬性,則顯示'group'散列鍵。
$VAR1 = {
'group' => 'EU',
'uid' => 'abcdef',
'lname' => 'SMITH',
'fname' => 'JOHN',
'file' => 'abcdef.ldif',
'company' => 'Some Company'
};
如果productfamily屬性在LDAP記錄中不存在,'group'散列鍵會丟失。
$VAR1 = {
'uid' => 'uvwxyz',
'lname' => 'Bar',
'fname' => 'Foo',
'file' => 'uvwxyz.ldif',
'company' => 'Another Company'
};
Solaris 5.9上的Perl版本爲5.8.5。
大約有6000個文件,但我將循環迭代次數限制爲10次,因爲問題在我的數據文件中出現得早。
嘗試單步執行perl調試器中的代碼:'perl -d program.pl'。它足夠小的代碼塊,你應該能夠在5分鐘左右的時間內找出它。 – 2013-04-25 21:53:09