Rosetta Code/Run examples: Difference between revisions

Content added Content deleted
(→‎{{header|Perl 6}}: bug fixes and updates)
(→‎{{header|Perl 6}}: Bug fixes and updates for 2018.05)
Line 294: Line 294:
Bool :d(:$deps), # Load dependencies
Bool :d(:$deps), # Load dependencies
Bool :p(:$pause), # pause after each task
Bool :p(:$pause), # pause after each task
Bool :b(:$broken), # pause after each task marked broken
Bool :b(:$broken), # pause after each task which is broken or fails in some way
);
);


Line 307: Line 307:
cmd => "\e[1;96m", # cyan
cmd => "\e[1;96m", # cyan
warn => "\e[0;91m", # red
warn => "\e[0;91m", # red
dep => "\e[40;36m",
clr => "\e[0m", # clear formatting
clr => "\e[0m", # clear formatting
);
);
Line 318: Line 319:


run('clear');
run('clear');



if $run {
if $run {
Line 348: Line 348:


note "Skipping first $skip tasks..." if $skip;
note "Skipping first $skip tasks..." if $skip;
my $redo;


for @tasks -> $title {
for @tasks -> $title {
$redo = False;
next if $++ < $skip;
next if $++ < $skip;
next unless $title ~~ /\S/; # filter blank lines (from files)
next unless $title ~~ /\S/; # filter blank lines (from files)
say $skip + ++$, ") $title";
say my $tasknum = $skip + ++$, ") $title";


my $name = $title.subst(/<-[-0..9A..Za..z]>/, '_', :g);
my $name = $title.subst(/<-[-0..9A..Za..z]>/, '_', :g);
Line 360: Line 362:


my $entry;
my $entry;
if $remote or !"$taskdir/$name.txt".IO.e or (($modified - now) > 86400 * 7) {
if $remote or !"$taskdir/$name.txt".IO.e or ((now - $modified) > 86400 * 7) {
my $page = $client.get("{ $url }/index.php?title={ uri-escape $title }&action=raw").content;
my $page = $client.get("{ $url }/index.php?title={ uri-escape $title }&action=raw").content;


Line 407: Line 409:
}
}
say "\nTesting $name$n";
say "\nTesting $name$n";
run-it($taskdir, "$name$n");
run-it($taskdir, "$name$n", $tasknum);
}
}
say %c<delim>, '=' x 79, %c<clr>;
say %c<delim>, '=' x 79, %c<clr>;
redo if $redo;
pause if $pause;
pause if $pause;


Line 427: Line 430:
}
}


sub run-it ($dir, $code) {
sub run-it ($dir, $code, $tasknum) {
my $current = $*CWD;
my $current = $*CWD;
chdir $dir;
chdir $dir;
Line 439: Line 442:
say "\nCommand line: {%c<cmd>}$cmd",%c<clr>;
say "\nCommand line: {%c<cmd>}$cmd",%c<clr>;
try shell $cmd;
try shell $cmd;
CATCH {
when /'exit code: 137'/ { }
default {
.resume unless $broken;
uh-oh($_);
if pause.lc eq 'r' {
unlink "$code.txt";
$redo = True;
}
}
}
}
}
chdir $current;
chdir $current;
say "\nDone $code";
say "\nDone task #$tasknum: $code";
}
}


sub pause {
sub pause {
prompt "Press enter to procede:>";
prompt "Press enter to procede:> ";
# or
# or
# sleep 5;
# sleep 5;
Line 463: Line 477:


multi check-dependencies ($fn, 'perl6') {
multi check-dependencies ($fn, 'perl6') {
my @use = $fn.IO.slurp.comb(/<?after $$ 'use '> \N+? <?before \h* ';'>/);
my @use = $fn.IO.slurp.comb(/<?after ^^ \h* 'use '> \N+? <?before \h* ';'>/);
if +@use {
if +@use {
for @use -> $module {
for @use -> $module {
next if $module eq any('v6','nqp') or $module.contains('MONKEY');
next if $module eq any('v6','nqp', 'NativeCall') or $module.contains('MONKEY')
or $module.contains('experimental') or $module.starts-with('lib');
my $installed = $*REPO.resolve(CompUnit::DependencySpecification.new(:short-name($module)));
my $installed = $*REPO.resolve(CompUnit::DependencySpecification.new(:short-name($module)));
shell("zef install $module") unless $installed;
print %c<dep>;
if $installed {
say 'ok: ', $module
} else {
say 'not installed: ', $module;
shell("zef install $module");
}
print %c<clr>;
}
}
}

multi check-dependencies ($fn, 'perl') {
my @use = $fn.IO.slurp.comb(/<?after $$ \h* 'use '> \w+['::'\w+]* <?before \N+? ';'>/);
if +@use {
for @use -> $module {
next if $module eq $module.lc;
my $installed = shell( "%l<exe> -e 'eval \"use {$module}\"; exit 1 if \$@'" );
print %c<dep>;
if $installed {
say 'ok: ', $module
} else {
say 'not installed: ', $module;
try shell("sudo cpan $module");
}
print %c<clr>;
}
}
}
}
Line 494: Line 534:
dir => 'perl',
dir => 'perl',
header => 'Perl',
header => 'Perl',
tag => rx/<?after '<lang ' 'perl' '>' > .*? <?before '</' 'lang>'>/,
tag => rx/:i <?after '<lang ' 'perl' '>' > .*? <?before '</' 'lang>'>/,
) }
) }


Line 503: Line 543:
dir => 'python',
dir => 'python',
header => 'Python',
header => 'Python',
tag => rx/<?after '<lang ' 'python' '>' > .*? <?before '</' 'lang>'>/,
tag => rx/:i <?after '<lang ' 'python' '>' > .*? <?before '</' 'lang>'>/,
) }
) }