package PIL::Parser; # This module takes the output of pugs -CPIL1-Perl5, eval()s it, and reblesses most # objects (we want PIL::PVal, not PVal). use warnings; use strict; # To s/VNum/PIL::VNum/g use Class::Rebless; # To support Inf, -Inf, and NaN use Math::BigInt; # Main class method: Parses the given PIL. sub parse { my ($class, $str) = @_; die "No string to parse given!\n" unless defined $str; local $@; my $struct = eval $str; die "Couldn't parse -CPIL1-Perl5 output: $@\n" if $@; Class::Rebless->custom($struct, "PIL", { editor => sub { my ($obj, $namespace) = @_; # We don't want PIL::Math::BigInt. return if ref($obj) =~ /^Math::Big/; bless $obj => $namespace . "::" . ref $obj; }}); return $struct; } 1;