perl hash값 취득 질문
my $send = {};
open( MAIL, "/bin/cat /var/log/maillog | /bin/grep 'postfix/smtpd' | /bin/grep 'sasl_username=' |" );
while( my $line = ) {
#if( $line =~ /client=(.*), sasl_method=\w+, sasl_username=(.*)$/ ) {
if( $line =~ /]: (.*): client=(.*), sasl_method=\w+, sasl_username=(.*)$/ ) {
#printf( "QUEUE=[%s] User=[%s], Client=[%s]\n",$1, $3, $2);
$send->{ $2 }->{ $1 }->{ $3 }++;
이런 소스가 있는데 send안에 값을 자유롭게 취득하고 싶습니다.
제 예상으로 send안에 이런식으로 값이 들어 있다고 생각 하는데
{{xxx,xxx,xxx}{xxx,xxx,xxx}{xxx,xxx,xxx}}
$1
$2
$3
번의 값들만 각자 취득하려면 어떻게 해야되나요?
foreach my $kaka (keys %{ $send } ){
my $haha = $send->{ $kaka };
printf( "USER2=[%s]\n", $kaka);
}
이렇게 해서 $2번 값을 취득하는건 성공했습니다..$send->{ $2 }->{ $1 }->{ $3 }++;로 되있으니까 $2가 send의 0번째 자리에 있어서 취득된걸로보입니다.
코드가 이상하게 깨져 있어서 헷갈린데 (코드 위
코드가 이상하게 깨져 있어서 헷갈린데 (코드 위 아래에 code, /code 태그로 둘러싸 주세요)
$send 안의 형태는 생각하신 대로가 아니라
이런 형태가 됩니다.
위의 경우 첫 단계 ($2)에 해당하는 부분은 'A', 'B' 두 가지입니다만,
두번째 단계($1)에 해당하는 부분은... 보기에 따라 달라집니다. 애초에 $send->{A}와 $send->{B}가 서로 다른 별개의 익명 해시를 가리키는 레퍼런스이니까요. 이런 경우 ('a','b') 아 ('a','c') 이렇게 각각 다르게 처리할지, 아니면 그냥 두번째 단계에 나오는 것을 모두 모아서 ('a','b','c')로 처리할지는 자기가 무슨 일을 할지에 따라 다르겠지요.
세번째 단계도 마찬가지고요.
암튼 저걸 쭉 뽑아내고 싶다면 본문에 적으신, 첫단계의 키를 뽑아내는 코드를 각 단계별로 중첩하시면 됩니다.
좋은 하루 되세요!
감사합니다
답변감사합니다
로 하니까
이 부분에 에러가 나는데 이건 왜그런건가요?
혹은 이 변수가 현재 어떤형식인지 볼 수 있는 방법이 있나요?
에러는, foreach 문단 위에 $send 변수할당
에러는, foreach 문단 위에 $send 변수할당 끝에 세미콜론 넣어주시면 될 거고요.
적으신 거 보니까 Data::Dumper 모듈도 아시는 것 같은데 그냥 그거 써서 보시면 됩니다.
좀 더 예쁘게 보고 싶으면
좋은 하루 되세요!
오우우오
와아.. ;세미콜론이 필요했군요
기본적인 것같은데 친절히 설명해주셔서 감사합니다.
열심히 공부하겠습니다!!
댓글 달기