]> git.vpit.fr Git - perl/modules/B-RecDeparse.git/blob - samples/brd.pl
Switch to qw<>
[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
9 my $deparser = B::RecDeparse->new(deparse => [ '-sCi0v1' ], level => 1);
10
11 sub spec (&) {
12  return unless defined $_[0] and ref $_[0] eq 'CODE';
13  my $deparsed = $deparser->coderef2text($_[0]);
14  print STDERR "$deparsed\n";
15  my $code = eval 'sub ' . $deparsed;
16  die if $@;
17  $code;
18 }
19
20 sub add ($$) { $_[0] + $_[1] }
21
22 sub mul ($$) { $_[0] * $_[1] }
23
24 sub fma ($$$) { add +(mul $_[0], $_[1]), $_[2] }
25
26 print STDERR '### ', fma(1, 3, 2), "\n";
27 my $sfma = spec sub { my $x = \&mul; fma $_[0], 3, $_[1] };
28 print STDERR '### ', $sfma->(1, 2), "\n";