Quick actions

cmd+k|ctrl+k

Navigation

Languages

search / eval / replace

Snippet info

Language

Raku

Visibility

public

Author

raiph.mellor

Created

2021-07-03T19:58:14.594413Z

Updated

2021-12-15T01:25:28.903341Z

# See https://stackoverflow.com/questions/57127263/capture-and-execute-multiline-code-and-incorporate-result-in-perl-6

use v6;

constant $ticks = '```';

my regex Search {
  $ticks '{perl6 evaluate=' $<evaluate>=(TRUE|FALSE) '}'
  $<code>=[<!before $ticks> .]*
  $ticks
}

sub Replace ($/) {
  "Code:\n" ~ $ticks ~ $<code> ~ $ticks ~
    ($<evaluate> eq 'TRUE'
      ?? "\n\n" ~ 'Output:' ~ "\n" ~ $ticks ~ "\n" ~ Evaluate($<code>) ~ $ticks
      !! '');
}

sub Evaluate ($code) {
  my $out; my $*OUT = $*OUT but role { method print (*@args) { $out ~= @args } }
  use MONKEY; my $eval-result = EVAL $code;
  $out // $eval-result ~ "\n"
}

spurt
  'example_new.md',
  slurp('example.md')
    .subst: &Search, &Replace, :g;

for $/ .list { # Iterate the list of matches
  .say for .chunks;
}

say "\n\n===============\n\nComplete new file:";

say slurp 'example_new.md';
INFO