Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Comment on

( #3333=superdoc: print w/ replies, xml ) Need Help??
Hello Monks,

I'm using Safe->reval to check if a generated perl expression is true.
I want to allow that perl expression to use a method from a custom perl module.
This method also uses Safe->reval (in a new compartment).
I can't get the nested reval to work (it works fine if called directly).

Here is the code:

The method in the custom module WOU_Util
my $compartment = new Safe; # module level $compartment->permit(qw()); # module level sub date_compare { my ($date, $op, $refdate) = @_; my ($mm_date, $dd_date, $yyyy_date) = split(/\//, $date); my ($mm_ref, $dd_ref, $yyyy_ref) = split(/\//, $refdate); my $date_str = $yyyy_date . $mm_date . $dd_date; my $ref_str = $yyyy_ref . $mm_ref . $dd_ref; $compartment->reval( qq{ ($date_str $op $ref_str) || return 0; # fall-through return 1; } ); }


And here's some test code that calls the method:
#!/usr/bin/perl -w use strict; use Safe; use WOU_Util; my $compartment = new Safe; $compartment->share_from('WOU_Util', [ 'date_compare' ] ); $compartment->permit( qw() ); my ($date1, $op, $date2); $date1 = '01/02/2004'; $date2 = '01/01/2004'; $op = 'gt'; # this prints $compartment->reval( "print 'greater' if \"$date1\" $op \"$date2\"" ); $op = '>'; # this doesn't print, throws error $compartment->reval( "print 'greater' if date_compare(\"$date1\",\"$op +\",\"$date2\")" );


The error is:
Use of uninitialized value in null operation at /usr/lib/perl5/5.6.1/i386-linux/Safe.pm line 222.
(in cleanup) Undefined subroutine &Safe::Root0:: called at /usr/lib/perl5/5.6.1/i386-linux/Safe.pm line 222.

In reply to nested Safe->reval and method from custom Module by jeremyh

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • Outside of code tags, you may need to use entities for some characters:
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.
  • Log In?
    Username:
    Password:

    What's my password?
    Create A New User
    Chatterbox?
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others cooling their heels in the Monastery: (6)
    As of 2014-08-23 21:34 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?

      The best computer themed movie is:











      Results (178 votes), past polls