#!/usr/bin/perl my $infile = $ARGV[0]; open STDIN, "<:utf8", $infile or die "$infile: $!"; binmode STDOUT, ":utf8"; my $max_args = 9; while (<>) { if (/«repeat»/) { my $line1 = $. + 1; my $block; while (<>) { last if /«end»/; $block .= $_; } $line2 = $. + 1; for (0..$max_args) { my $copy = $block; $copy =~ s{«([^«»\|]*)\|([^«»\|]*)»}{join $2, map eval "\"$1\"", 1..$_}ge; $copy =~ s/«([^«»\|]+)»/eval $1/ge; print "\n#line $line1 \"$infile\"\n$copy"; } print "\n#line $line2 \"$infile\"\n"; } else { s/«([^«»\|]+)»/eval $1/ge; print; } }