perl 数组赋值 求解释
my%adusers;while(my$entry=$result->shift_entry){my$sam=$entry->get_value('sAMAccountN...
my %adusers;
while (my $entry = $result->shift_entry) {
my $sam = $entry->get_value('sAMAccountName');
my $mail = $entry->get_value('mail');
if (!defined($sam) || $sam eq "") {
next;
}
if (!defined($mail) || $mail eq "") {
next;
}
if ($sam !~ /^[a-zA-Z0-9._-]+$/) {
next;
}
print LOG $sam . ", " . $mail . "\n";
my $user = [];
@{$user}[0] = $sam;
@{$user}[1] = $mail;
$adusers{$sam} = $user; ###求这句的解释 %adusers 和这里$adusers赋值$user含义
$adcounter++;
} 展开
while (my $entry = $result->shift_entry) {
my $sam = $entry->get_value('sAMAccountName');
my $mail = $entry->get_value('mail');
if (!defined($sam) || $sam eq "") {
next;
}
if (!defined($mail) || $mail eq "") {
next;
}
if ($sam !~ /^[a-zA-Z0-9._-]+$/) {
next;
}
print LOG $sam . ", " . $mail . "\n";
my $user = [];
@{$user}[0] = $sam;
@{$user}[1] = $mail;
$adusers{$sam} = $user; ###求这句的解释 %adusers 和这里$adusers赋值$user含义
$adcounter++;
} 展开
2个回答
展开全部
%adusers 是hash,$sam是这个hash的key,整个$adusers{$sam}可以看做一个变量,相当于hash的value,所以这句话的意思是把$user这个变量赋给以$sam为key的hash%adusers的value
声明hash是用%'hash的名称',调用hash的value是用$'hash的名称'{key}。
声明hash是用%'hash的名称',调用hash的value是用$'hash的名称'{key}。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先, 这个程序可以简化一点的 (而我在最後加了两句, 留意结果) :
while (my $entry = $result->shift_entry) {
my $sam = $entry->get_value('sAMAccountName');
my $mail = $entry->get_value('mail');
print LOG "$sam, $mail$/";
next unless ( $sam and $mail and $sam =~ /^\w+$/g );
my $user = [];
@{$user}[0] = $sam;
@{$user}[1] = $mail;
$adusers{$sam} = $user;
}
use Data::Dumper;
print Dumper \%adusers;
其实当中的:
my $user = [];
@{$user}[0] = $sam;
@{$user}[1] = $mail;
其实又可以写成 :
my $user = [ $sam , $mail ];
$adusers{$sam} = $user;
又可以写成 :
$adusers{$sam} = [ $sam , $mail ];
最後你会发现 %adusers 的结构就是 :
$VAR1 => {
'路人甲' => [
'路人甲',
'email address',
],
'路人乙' => [
'路人乙',
'email address',
],
}
所以使用的时候就是
$mail = $adusers{'路人甲'}->[1] ;
print $mail;
後记, 其实... 根本不需要
my $user = [];
@{$user}[0] = $sam;
@{$user}[1] = $mail;
$adusers{$sam} = $user;
用
$adusers{$sam} = $mail ; # 就够了.
因为那个 key (路人甲) 与 $user->[0] (都是'路人甲') 根本就是重覆的数据
while (my $entry = $result->shift_entry) {
my $sam = $entry->get_value('sAMAccountName');
my $mail = $entry->get_value('mail');
print LOG "$sam, $mail$/";
next unless ( $sam and $mail and $sam =~ /^\w+$/g );
my $user = [];
@{$user}[0] = $sam;
@{$user}[1] = $mail;
$adusers{$sam} = $user;
}
use Data::Dumper;
print Dumper \%adusers;
其实当中的:
my $user = [];
@{$user}[0] = $sam;
@{$user}[1] = $mail;
其实又可以写成 :
my $user = [ $sam , $mail ];
$adusers{$sam} = $user;
又可以写成 :
$adusers{$sam} = [ $sam , $mail ];
最後你会发现 %adusers 的结构就是 :
$VAR1 => {
'路人甲' => [
'路人甲',
'email address',
],
'路人乙' => [
'路人乙',
'email address',
],
}
所以使用的时候就是
$mail = $adusers{'路人甲'}->[1] ;
print $mail;
後记, 其实... 根本不需要
my $user = [];
@{$user}[0] = $sam;
@{$user}[1] = $mail;
$adusers{$sam} = $user;
用
$adusers{$sam} = $mail ; # 就够了.
因为那个 key (路人甲) 与 $user->[0] (都是'路人甲') 根本就是重覆的数据
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询