#!/usr/bin/env perl use strict; use warnings; use 5.10.0; use Cwd; use File::Basename; use Text::Markdown::Discount; use IPC::System::Simple qw(capturex); # Enable html5 block-level tags: Text::Markdown::Discount::with_html5_tags(); my $flags = Text::Markdown::Discount::MKD_EXTRA_FOOTNOTE(); my $markdown = Text::Markdown::Discount->new; my $cwd = Cwd::getcwd(); my $full_source = ''; while (my $source = get_input()) { # A simple preprocessor: my ($basename, $dir) = fileparse($ARGV); # get path of target file chdir $dir; $source =~ s{```php(.*?)```}{handle_block($1);}egs; chdir $cwd; $full_source .= $source; } print $full_source; # actually spit out the contents of the slide sub get_input { local $/ = undef; my $source = <>; return $source; } sub handle_block { my ($block) = @_; my $cmd; file_put_contents('/tmp/phpslideoutput.php', $block); my $result = `php /tmp/phpslideoutput.php`; chomp($result); if ($result) { return "```php${block}```\n\nOutput:\n\n```${result}\n```"; } else { return "```php${block}```"; } } sub file_put_contents { my ($file, $contents) = @_; open(my $fh, '>', $file) or die "Unable to open $file for writing: $!"; print $fh $contents; close $fh; }