Update a configuration file: Difference between revisions

Content added Content deleted
(Added Kotlin)
(→‎{{header|Perl 6}}: Update broken example. use a module for tempfile, explicitly close file)
Line 2,489: Line 2,489:
The script:
The script:


<lang perl6>#!/usr/bin/env perl6
<lang perl6>use File::Temp;


my $tmpfile = tmpfile;
my ($tmpfile, $out) = tempfile;


sub MAIN ($file, *%changes) {
sub MAIN ($file, *%changes) {
%changes.=map({; .key.uc => .value });
%changes.=map({; .key.uc => .value });
my %seen;
my %seen;

my $out = open $tmpfile, :w;
for $file.IO.lines {
for $file.IO.lines {
when /:s ^ ('#' .* | '') $/ {
when /:s ^ ('#' .* | '') $/ {
Line 2,514: Line 2,512:
}
}
}
}

say $out: format-line .key, |(.value ~~ Bool ?? (Nil, .value) !! (.value, True))
say $out: format-line .key, |(.value ~~ Bool ?? (Nil, .value) !! (.value, True))
for %changes;
for %changes;
move $tmpfile, $file;
}


$out.close;
END { unlink $tmpfile if $tmpfile.IO.e }


copy $tmpfile, $file;
}


sub format-line ($key, $value, $enabled) {
sub format-line ($key, $value, $enabled) {
("; " if !$enabled) ~ $key.uc ~ (" $value" if defined $value);
("; " if !$enabled) ~ $key.uc ~ (" $value" if defined $value);
}

sub tmpfile {
$*SPEC.catfile: $*SPEC.tmpdir, ("a".."z").roll(20).join
}</lang>
}</lang>