Rosetta Code/Run examples: Difference between revisions

→‎{{header|Perl 6}}: Bug fixes and updates for 2018.05
(→‎{{header|Perl 6}}: bug fixes and updates)
(→‎{{header|Perl 6}}: Bug fixes and updates for 2018.05)
Line 294:
Bool :d(:$deps), # Load dependencies
Bool :p(:$pause), # pause after each task
Bool :b(:$broken), # pause after each task markedwhich is broken or fails in some way
);
 
Line 307:
cmd => "\e[1;96m", # cyan
warn => "\e[0;91m", # red
dep => "\e[40;36m",
clr => "\e[0m", # clear formatting
);
Line 318 ⟶ 319:
 
run('clear');
 
 
if $run {
Line 348:
 
note "Skipping first $skip tasks..." if $skip;
my $redo;
 
for @tasks -> $title {
$redo = False;
next if $++ < $skip;
next unless $title ~~ /\S/; # filter blank lines (from files)
say my $tasknum = $skip + ++$, ") $title";
 
my $name = $title.subst(/<-[-0..9A..Za..z]>/, '_', :g);
Line 360 ⟶ 362:
 
my $entry;
if $remote or !"$taskdir/$name.txt".IO.e or (($modifiednow - now$modified) > 86400 * 7) {
my $page = $client.get("{ $url }/index.php?title={ uri-escape $title }&action=raw").content;
 
Line 407 ⟶ 409:
}
say "\nTesting $name$n";
run-it($taskdir, "$name$n", $tasknum);
}
say %c<delim>, '=' x 79, %c<clr>;
redo if $redo;
pause if $pause;
 
Line 427 ⟶ 430:
}
 
sub run-it ($dir, $code, $tasknum) {
my $current = $*CWD;
chdir $dir;
Line 439 ⟶ 442:
say "\nCommand line: {%c<cmd>}$cmd",%c<clr>;
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;
say "\nDone task #$tasknum: $code";
}
 
sub pause {
prompt "Press enter to procede:> ";
# or
# sleep 5;
Line 463 ⟶ 477:
 
multi check-dependencies ($fn, 'perl6') {
my @use = $fn.IO.slurp.comb(/<?after $$^^ \h* 'use '> \N+? <?before \h* ';'>/);
if +@use {
for @use -> $module {
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)));
shell("zefprint install $module") unless $installed%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 ⟶ 534:
dir => 'perl',
header => 'Perl',
tag => rx/:i <?after '<lang ' 'perl' '>' > .*? <?before '</' 'lang>'>/,
) }
 
Line 503 ⟶ 543:
dir => 'python',
header => 'Python',
tag => rx/:i <?after '<lang ' 'python' '>' > .*? <?before '</' 'lang>'>/,
) }
 
10,327

edits