2015-05-27 130 views
-4

Python的法人代碼:Perl的等價於python exec?

exec("def f():print 123"); f(); 

什麼是一個Perl相當於建設或如何綁定的符號從EVAL電流範圍從Perl中的eval?

eval("sub f(){ print 123;}"); f(); 
    "Undefined subroutine &main::f" 

問題是不現實的,因爲它有印錯在它第一個定義。

+5

你真的* *不希望這樣做 – Borodin

+0

你怎麼知道是什麼他想要做什麼?他可能會進入混淆的perl比賽... – GreenAsJade

+0

字符串'eval'是危險的,因爲它可能導致代碼注入。除非你真的瞭解安全性,否則不要使用它。請參閱'perldoc perlsec' http://perldoc.perl.org/perlsec.html – shawnhcorey

回答

2

我不知道你想實現什麼,但字符串的eval會把功能包的命名空間(如果已經有一個將重新定義按該名稱的功能)。如果你只需要這在一個地方:

my $f = sub { my $v = shift; sub { print $v } }->(123); 
... 
$f->(); 

例子:

#!/usr/bin/env perl -l 

use strict; 
use warnings; 

sub f() { print 456 }; 

eval "sub f() { print 123 }"; 

f(); 

my $f = sub { my $v = shift; sub { print $v } }->(123); 

$f->(); 

輸出:

Subroutine f redefined at (eval 1) line 1. 
123 
123
+0

感謝您使用匿名函數提出的技巧,但我只是在子程序定義中做了錯誤打印) – bruziuz

+0

是否有原型爲空的原因? 'sub(){..}' –

+0

我認爲是這樣,有空的原型+一些冒號+在Perl中的eval調用安靜的模型=>它會導致在stackoverflow中不必要的問題) – bruziuz