]> git.vpit.fr Git - perl/modules/B-RecDeparse.git/blob - samples/brd.pl
Importing B-RecDeparse-0.01.tar.gz
[perl/modules/B-RecDeparse.git] / samples / brd.pl
1 #!/usr/bin/env perl
2
3 use strict;
4 use warnings;
5
6 use lib qw{blib/lib};
7 use B::RecDeparse;
8 # use B::Deparse;
9
10 my $deparser = B::RecDeparse->new(deparse => [ '-sCi0v1' ], level => 1);
11 # my $deparser = B::Deparse->new('-sCi0v1');
12
13 sub spec (&) {
14  return unless defined $_[0] and ref $_[0] eq 'CODE';
15  my $deparsed = $deparser->coderef2text($_[0]);
16  print STDERR "$deparsed\n";
17  my $code = eval 'sub ' . $deparsed;
18  die if $@;
19  $code;
20 }
21
22 sub add ($$) { $_[0] + $_[1] }
23
24 sub mul ($$) { $_[0] * $_[1] }
25
26 sub fma ($$$) { add +(mul $_[0], $_[1]), $_[2] }
27
28 print STDERR '### ', fma(1, 3, 2), "\n";
29 my $sfma = spec sub { my $x = \&mul; fma $_[0], 3, $_[1] };
30 print STDERR '### ', $sfma->(1, 2), "\n";