なるほど…だいたいよくわかりました、ありがとうございます。 でもまだget_domainサブルーチン中の処理がよくわかりませんねぇ…。 while文の最初のif文の中です。 493: if ( ( $len & 0xc0 ) == 0xc0 ){ 494: # 上位 2ビットが立っていたら、もう 1バイト読みこむ (合計 16ビット)。 495: # そして上位 2ビットを落とし、残り 14ビットを DNS サーバから 496: # 返された UDP データグラム先頭からのオフセットとして再帰。。 497: 498: my $offset = unpack('n', $data) ^ 0xc000; 499: my $new_data = substr($org_data, $offset); 500: substr($data, 0, 2) = ''; 501: 502: my ($domain_part) = get_domain($new_data, $org_data); 503: push(@domains, $domain_part); 504: last; 505: 506: } else { 507: # 上位 2ビットが立っていないので、カウンタとして扱う。 508: substr($data, 0, 1) = ''; 509: } まず、if文の中で$dataの上位2ビットが立っていたときに、その2ビットを除いた上位14ビットを$offsetに入れて、$org_dataの$offset番目からのデータを$new_dataに入れて、$dataの上位2ビットを落としたところまではわかりました。 そのあと再びget_domainサブルーチンを呼び出すところからが…どうなるのでしょうか??(^^; また、else文の中の1行はどういった意味を持っているのでしょうか? ここでいう「カウンタ」という物もよくわからなくて…。 どうか、よろしくお願いします |