Devel::Declare is a source filter

Devel::Declareのフロントエンドモジュールでは「これはソースフィルタではない」と書いてあったりするので誤解があるようですが,Devel::Declareはソースフィルタです。
たとえば以下のコード:

#!perl
use strict;
use MooseX::Declare;
class Foo{
	method hello(Str $s){
		print "Hello, $s world!\n";
	}
}

Foo->new->hello("MooseX::Declare");
__END__

これをB::Deparseを使ってソースを復元すると以下のようになります。

use MooseX::Declare;
package Foo;
sub BEGIN {
    use warnings;
    use strict 'refs';
    require MooseX::Declare;
    do {
        'MooseX::Declare'->import('outer_package', 'Foo', 'file', 'decl.pl', 'stack', ['MooseX::Declare::StackItem'->new('identifier', 'class', 'handler', 'MooseX::Declare::Syntax::Keyword::Class', 'is_dirty', '0', 'namespace', 'Foo')])
    };
}
use Moose ('confess', 'blessed', 'extends', 'has', 'inner', 'super');
use namespace::autoclean;
sub BEGIN {
    use warnings;
    use strict 'refs';
    'Devel::Declare::Context::Simple'->inject_scope('Foo->meta->make_immutable; BEGIN { MooseX::Declare::Util::outer_stack_pop __FILE__ }');
}
sub BEGIN {
    use warnings;
    use strict 'refs';
    'Devel::Declare::Context::Simple'->inject_scope('');
}
package main;
use warnings;
use strict 'refs';
&class(sub {
    package Foo;
    &method(sub {
        my($self, $s) = @_;
        print "Hello, $s world!\n";
    }
    );
}
);
'Foo'->meta->make_immutable;
sub BEGIN {
    MooseX::Declare::Util::outer_stack_pop('decl.pl');
}
'Foo'->new->hello('MooseX::Declare');

B::DeparseはコンパイルされたPerlコードからソースコードを復元するので,フィルタリング後のソースコードをそのまま出力するのではないのですが,元のコードにさまざまな加工が施されているのは分かると思います。
なお,実際にはPL_checkハックなど,単なるソースフィルタ以上のことをしているので,復元後のソースコードは実行できません。