を に変換 use strict; my $levelOffset=0; my $level = 1; my @csnum; $csnum[$level]=0; my ($l, $t, $s); my $lv; while(<>){ chop; y/0/0/; y/1/1/; y/2/2/; y/3/3/; y/4/4/; y/5/5/; y/6/6/; y/7/7/; y/8/8/; y/9/9/; y/././; y/−/-/; if( /^\s*(\d+)(?:\s*[-.]\s*([-\s\d.]+))?\s*\.?\s*(.*)$/){ ($l, $t, $s)=($1, $2, $3); print STDERR "<$l><$t><$s>\n"; $lv = 1; if($t ne ""){ ++$lv while( $t=~/\d+/g ); } print STDERR "lv=$lv\n"; if( $lv-$levelOffset == $level){ $csnum[$level]++; } elsif( $lv-$levelOffset < $level ){ $levelOffset =0; $level = $lv; $csnum[$level]++; $#csnum = $level; } elsif( $lv == $level+1){ ++$level; $csnum[$level]=1; } else{ # section too deep $levelOffset = $lv-$level-1; print STDERR "leveloffset=$levelOffset\n"; ++$level; $csnum[$level]=1; } print " " x $level; print join(".", @csnum[1..$level]); print " $s\n"; } else{ print "$_\n"; } } |