#!perl package SQL_DSL_Transform; use warnings; use strict; use Params::Util qw/_INSTANCE/; use parent 'PPI::Transform'; sub new { shift->SUPER::new(@_) } sub document { my $self = shift; my $document = _INSTANCE(shift, 'PPI::Document') or return undef; my $elements = $document->find( sub { $_[1]->isa('PPI::Token::Word') or return ''; $_[1]->content eq 'SQL' or return ''; $_[1]->snext_sibling->isa('PPI::Structure::Block') or return ''; return 1; } ); return undef unless defined $elements; return 0 unless $elements; foreach my $e (@$elements) { my $n = PPI::Document->new(\"package SQL_DSL;"); for my $t (reverse $n->tokens) { $e->snext_sibling->first_token->insert_after($t->remove) or die; } } return scalar @$elements; } 1;