나는 지난주에 Perl을 배우기 시작했습니다.두 연관 배열 비교
'tokens'가 포함 된 파일의 연관 배열이 있습니다. 숫자가 많습니다. '토큰 (tokens)'이 포함 된 SQL 데이터베이스의 다른 연관 배열이 있습니다.
파일의 토큰이 데이터베이스에 없는지보고 싶습니다. 그러나 내가하는 일은 효과가없는 것 같아서 혼란 스럽다는 결론에 도달했습니다.
은 내가 완전히는 연관 배열을 이해 아직 확실하지 않다하지만이 파일의 해시 내 코드 조각입니다 :
while($row = <FILE>){
if($row =~ /^000\E/){
@tmp=split(/\s+/,$row);
if($tmp[1] ne "Unassigned"){
$tokenfile{$tmp[0]} = $tmp[1] . " " . $tmp[2];
}
}
}
$tmp[1]
+ $tmp[2]
$tmp[0]
- 토큰을 비교하고 싶다. 이것은 SQL 해시입니다.
while(@rows = $sth->fetchrow_array){
($name, $passwd, $uid, $gid, $quota, $comment, $gcos, $dir, $shell) = getpwnam("\L$rows[1]\E");
$gcos =~ s/,.*//;
if(!defined($gcos)){
$missing++;
$tokendb{$rows[0]} = $rows[1];
}
else{
$tokendb{$rows[0]} = $gcos;
}
}
$rows[0]
은 토큰입니다.
foreach $token (keys(%tokendb)) {
foreach $token2(keys(%tokenfile)){
if($token ne $token2){
print "$token2 NOT IN DATABASE\n";
}
}
}
를하지만 나에게 데이터베이스에 여전히 값의 많은의 결과를 제공합니다.
이것이 작동하지 않는 이유에 대한 몇 가지 힌트가 좋을 것 같습니다. 나는 그것이 매우 간단하지만 내 두뇌가 오늘 그렇게 잘 작동하지 않는다는 것을 알기 때문에 매우 실망 스럽다 (나의 21 번째 생일 임에도 불구하고 |).
'/^000 \ E /'에서'\ E' 란 무엇을 의미합니까? 이 이스케이프 시퀀스는'\ Q ... \ E'와 같은 다른 이스케이프 시퀀스를 종료하는 데 사용됩니다. – TLP
디버깅 목적으로 이것을 사용하십시오'Use Data :: Dumper; $ 데이터 :: 덤퍼 :: Useqq = 1; Dumper \ % tokendb, \ % tokenfile;'을 출력하십시오. 아니면 너무 지저분 해지면 루프의 값을 출력하십시오 :'print Dumper ''$ token 'ne'$ token2 ' " – TLP
경고! 경고! 여전히 "연관 배열 (associative arrays)"이라고 부르는 소스에서 Perl을 배우는 경우, 아마도 15 년이 넘은 소스로부터 학습하게됩니다. –