[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 08/25 20:07 / Filesize : 271 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Perlコーディング初心者質問スレ Part 56



110 名前:nobodyさん mailto:sage [2007/09/27(木) 06:29:35 ID:???]
1000:1234:abcd:2000::/120のような省略されたIPv6のアドレスを展開して
リストに格納したいのですが、プレフィックス長(=120)に応じて
展開する部分が一部不完全なので教えてください。
下のコードだと、下4桁の連番生成しかできない上に、プレフィックス長が4の倍数でない場合にうまくいきません。
これを4の倍数でなくても&下4桁以上もちゃんと展開できるようにしたいのですが…。
たとえば、1000:1234:abcd:2000::/127であれば、
1000:1234:abcd:2000:0000:0000:0000:0000
1000:1234:abcd:2000:0000:0000:0000:0001
の二つが出来てほしいのです。
できれば10進数で連番作ったものを16進数変換してる部分もなんとかしたいんですけど…。

sub _Gen{
  my ($addr, $pref) = split(m|/|, $_[0]);
  $addr = &_Format($addr); # ここで省略のない32桁の英数字を4桁ごとに:で区切ったものになる
  $addr =~ s/://g;
  if($pref % 4 != 0 || $pref < 112 || $pref > 128){
    return;
  }elsif($pref == 128){
    1 while $addr =~ s/(\w+)(\w\w\w\w)/$1:$2/;
    return $addr;
  }
  my $fixed = substr($addr, 0, $pref / 4);
  my $keta = (128 - $pref) / 4;
  my (@addrs, $tmp);
  for(my $i=0; $i<16**$keta; $i++){
    $tmp = sprintf("$fixed%0${keta}x", $i);
    1 while $tmp =~ s/(\w+)(\w\w\w\w)/$1:$2/;
    push(@addrs, $tmp);
  }
  return @addrs;
}






[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<271KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef