#!/usr/bin/perl -- use strict; use warnings; use Data::Dump qw/ dd /; use Safe; use Opcode; my %full = map { $_ => Opcode::opdesc( $_ ) } Opcode::opset_to_ops( Opcode::full_opset() ); my @wanted = grep { exists $full{$_} } ( "anonlist", "anonhash", "pushmark", "const", "undef", "kvaslice", "kvhslice", "list", "lineseq", "padsv", "padav", "padhv", "padany", "padany", "leaveeval", ## $@ tells you about it :) ); #~ dd( \%full ); #~ dd( \@wanted ); my $s = Safe->new; $s->permit_only( @wanted ); my @its = ( q{ [ 1, [ 2, [ 3e4 , undef ] ] ] }, q{ { a => { b=> { c=> { 1e6, undef, }, }, }, } }, ); dd( { -REV, [ $s->reval( $_ ) ] }, { -ERR, "$@" } ) for @its; __END__