Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: using features in a Safe compartment

by muzakfetch (Scribe)
on Mar 21, 2011 at 23:21 UTC ( [id://894636]=note: print w/replies, xml ) Need Help??


in reply to using features in a Safe compartment

Hi! First of all, "reval" only evaluates the code and then returns the value. So in this case, the following will work:
use warnings; use strict; use Safe; use feature qw{say}; say "Hello!"; my $cft = Safe->new; $cft->deny_only(); my $ret = $dft->reval(qq{return "Hello Again!"}, undef); say $ret;
So using the "say" doesn't work because it evaluates to nothing, and returns nothing. In fact, I was kind of surprised that it didn't at least return "1" since say should return "true". But who knows.

Update: something else just occurred to me. Safe is not going to evaluate the "use" or in this case what I tried below. It evaluates the entire script, doesn't recognize the "say" keyword and throws the error. It never *executes* the use or the require/import.
my $unsafe = qq| require feature; feature->import( qw{say switch} ); say "Hope this works"; return "I did what you said"; |; # explicit load of feature, but doesn't work (unexpected result) $ret = $cft->reval( $unsafe, undef );


HTH,
Tyler.

Replies are listed 'Best First'.
Re^2: using features in a Safe compartment
by djerius (Beadle) on Mar 22, 2011 at 04:09 UTC
    I'm afraid I don't really understand your first point:
    "reval" only evaluates the code and then returns the value.

    So using the "say" doesn't work because it evaluates to nothing, and returns nothing.

    As my example showed, the code is never evaluated because it fails to compile due to say not being recognized. My attempt at enabling the feature in the Safe compartment via use feature doesn't work.

    It works in a standard eval:

    $ perl -e 'eval q[use feature qw[ say ]; say "hello"]' hello
    The code in your update shows the same problem that I'm struggling with, namely that use feature is not enabling the feature in the Safe compartment.

    Perhaps I should rephrase the question: how does one get use feature to work in a Safe compartment?

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://894636]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (3)
As of 2024-09-07 14:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuli‥ 🛈The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.