Rosetta Code/Run examples: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) (→{{header|Perl 6}}: bug fixes and updates) |
Thundergnat (talk | contribs) (→{{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), |
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 (( |
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 |
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))); |
||
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>'>/, |
||
) } |
) } |
||