Config-Cfe
view release on metacpan or search on metacpan
sprintf($par->{'find_sect'}, 'end', $section));
return [] unless $to >= $from;
return &get_line($from, $to);
}
######################################################################
# Internal subroutine
# start searching from line 'start' for 'regexp';
# Returns the line number or -1 if not found.
sub find_row {
my ($start, $regexp) = @_;
my ($i, $line);
my $lines = $par->{'lines'};
my $l = -1;
for ($i = $start; $i < @$lines; $i++) {
$l = $i, last if $lines->[$i] =~ /$regexp/;
}
return $l;
}
# splits any multilined string and returns an array of
# guaranteed single lines.
sub split_cr {
my ($i, @new);
for my $i (@_) {
push(@new, ''), next if $i eq '';
push(@new, split(/\n/, $i));
}
return @new;
}
# Print out debug info if verbose is active.
#
sub verbose {
my ($func, @txt) = @_;
my ($l, $i);
return if $verbose == 0;
$l = $par->{'cur_line'};
for my $i (@txt) {
push(@verb_save, "$func($l): $i\n"), next if $verbose < 0;
print "$func($l): $i\n";
}
}
sub reset_par {
$par->{'max_lines'} = 100000;
$par->{'file_name'} = '';
$par->{'num_lines'} = 0;
$par->{'lines'} = [];
$par->{'cur_line'} = 0;
$par->{'edit'} = 0;
$par->{'mode'} = 0666 & umask;
$par->{'uid'} = 0;
$par->{'gid'} = 0;
&set_comment;
}
sub get_filemode {
my ($f) = @_;
($par->{'mode'}, $par->{'uid'}, $par->{'gid'}) = (stat($f))[2,4,5];
$par->{'mode'} &= 0777;
&verbose('get_filemode',
sprintf("mode=0%o, uid=%d, gid=%d", $par->{'mode'},
$par->{'uid'}, $par->{'gid'}));
}
sub BEGIN {
my (%type, $uname, $r, $ostype, $version, $mach_type);
$par = {};
&reset_par;
chop($uname = `uname -srm`);
($ostype, $version, $mach_type) = split(/\s+/, $uname);
($r = $version) =~ tr/0-9//cd;
$r .= '0' if length($r) < 3;
$r *= 1.0;
($par->{'os_type'} = $ostype) =~ tr/A-Z/a-z/;
$par->{'os_rev'} = $r;
($par->{'mach_type'} = $mach_type) =~ tr/A-Z/a-z/;
$type{'sunos4'} = $ostype eq 'SunOS' && $version < 5 ? $r : 0;
$type{'sunos5'} = $ostype eq 'SunOS' && $version > 5 ? $r : 0;
$type{'freebsd'} = $ostype eq 'FreeBSD' ? $r : 0;
$type{'sunos'} = $ostype eq 'SunOS' ? $r : 0;
$type{'linux'} = $ostype eq 'Linux' ? $r : 0;
$type{$1} = $mach_type =~ /^(i[3-9]86)/ ? $r : 0;
$verbose = -1;
if (-f '/etc/debian_version') {
my $deb;
open(IN, '/etc/debian_version');
chop($deb = <IN>);
close(IN);
$deb =~ s/\.//;
$deb .= '0' if length($deb) < 3;
$type{'debian'} = $deb;
}
for my $i (keys %type) {
&verbose('init', "sub is_$i\{return $type{$i};}");
eval "sub is_$i\{ &verbose('is_$i','$type{$i}');".
"return \"$type{$i}\";}";
}
for my $i (qw(os_type os_rev mach_type)) {
&verbose('init', "sub par_$i { return \"$par->{$i}\"; }");
eval "sub par_$i { ".
"&verbose('par_$i','$par->{$i}');".
"return \"$par->{$i}\"; }";
}
&set_comment;
$verbose = 0;
}
( run in 1.262 second using v1.01-cache-2.11-cpan-39bf76dae61 )