use t::TestModuleCompile tests => 9; filters({ perl => 'process' }); no_diff; run_is perl => 'folded'; sub process { Module::Compile->pmc_fold_blocks(shift) } __DATA__ === Fold a heredoc whilst preserving ~s --- perl my $x = "~ ~~ ~~~ ~~~~ ~~~~~"; sub foo { my $self = shift; $self->baz(<baz(<baz(<baz(<baz(<<''); sub bar { print "bar"; } } --- folded sub foo { my $self = shift; $self->baz(<<''); 8dc957d71f448e926d28ebe8444d5b33c1d69dc2 } === A double heredoc --- perl sub foo { my $self = shift; $self->baz(<<'THIS', <<"THAT"); THERE THAT THIS THIS THAT THERE } --- folded sub foo { my $self = shift; $self->baz(<<'THIS', <<"THAT"); fe5485c0595b48c3a4126af814e8d53517ecd1d8 THIS 5b35b1abf837461ac7f9b09d42f8560601b028f6 THAT THERE } === A double heredoc. Same END token --- perl sub foo { my $self = shift; $self->baz(<baz(< '>>', ); --- folded ( '<<' => '>>', ); === All kinds --- perl print "ok 1"; # $xxx = <