标签: eval

不使用eval,按字符串名称访问命名空间的javascript对象

我遇到了需要从服务器访问javascript对象的情况.服务器返回函数或对象的字符串名称,并且基于其他元数据,我将以不同方式评估对象.

最初我正在评估(eval([string])),一切都很好.最近我更新了函数,以免eval安全性让人高枕无忧,我遇到了命名空间对象/函数的问题.

具体来说,我尝试eval([name])用a 替换a window[name]来通过全局对象vs的方括号语法访问对象eval.

但是我遇到了命名空间对象的问题,例如:

var strObjName = 'namespace.serviceArea.function';
// if I do
var obj = eval(strObjName); // works

// but if I do
var obj = window[strObjName]; // doesn't work
Run Code Online (Sandbox Code Playgroud)

任何人都可以提出一个很好的解决方案,以避免使用eval命名空间字符串?

javascript namespaces eval

13
推荐指数
2
解决办法
6213
查看次数

Perl:$ SIG {__ DIE__},eval {}和堆栈跟踪

我有一段Perl代码,有点像下面这样(强烈简化):有一些级别的嵌套子程序调用(实际上是方法),而一些内部代码执行自己的异常处理:

sub outer { middle() }

sub middle {
    eval { inner() };
    if ( my $x = $@ ) { # caught exception
        if (ref $x eq 'ARRAY') {
            print "we can handle this ...";
        }
        else {
            die $x; # rethrow
        }
    }
}

sub inner { die "OH NOES!" }
Run Code Online (Sandbox Code Playgroud)

现在我想更改该代码,以便它执行以下操作:

  • 为每个"冒泡"到最外层(sub outer)的异常打印一个完整的堆栈跟踪.具体来说,堆栈跟踪应该不是在"第一层次停止eval { }".

  • 无需更改任何内部级别的实现.

现在,我这样做的方法是__DIE__outersub中安装一个本地化的处理程序:

use Devel::StackTrace;

sub outer {
    local $SIG{__DIE__} = sub { …
Run Code Online (Sandbox Code Playgroud)

perl eval stack-trace

12
推荐指数
2
解决办法
8650
查看次数

如何解压缩JavaScript文件的内容?

你知道那些打包的js文件是什么样的,对吗?

 eval(function(p,a,c,k,e,d){ ... } ('obfuscated-string'.split('|'),0,{}))

它恰好是我必须调整一些看起来像这样的大型遗留代码,我想找到一种方法将其转换为更易读的版本.

如果那是不可能的,我至少可以摆脱评估吗?

javascript compression eval unpack

12
推荐指数
2
解决办法
2万
查看次数

F#相当于Eval

是否有与Eval等效的F#?我的目的是让我的应用程序从文件中加载一个小代码示例

let file = "c:\mysample"
let sample = loadFromFile file
let results = eval(sample)
Run Code Online (Sandbox Code Playgroud)

我是F#的新手,在将其应用到项目之前尝试找出一些限制.

谢谢

.net lisp f# eval

12
推荐指数
1
解决办法
2404
查看次数

在没有本地化$ @一个bug的情况下,在CPAN模块中进行"eval"吗?

我想我在Params :: Validate中遇到过一个错误,但我不确定我是否正确识别出有问题的代码.有问题的代码无法通过链传递异常(使用Try :: Tiny),所以我开始调试并发现try块内使用的类有一个析构函数.这个析构函数调用使用Params::Validate和查看Validate.pm 源代码的对象方法,我看到eval没有$@本地化,即全局$@被覆盖.

现在我看到两个选项:

  1. Params::Validate应始终本地化$@,因此这是一个应报告的错误.
  2. 错误是在有问题的类中,因为它不应该Params::Validate在析构函数中使用.Params::Validate可以保持现状.

哪一个?我该如何处理这种情况?

PS:我认为CPAN模块应该坚如磐石,既不会破坏自己也不会破坏环境,因此问题标题.

perl eval exception

12
推荐指数
1
解决办法
179
查看次数

为什么人们说javascript eval()是邪恶的,但你对setTimeout和setInterval等没有异议?

如果我没有弄错,eval会在给定的字符串中执行有效的代码

eval("alert('hey')");
Run Code Online (Sandbox Code Playgroud)

setTimeout("alert('hey')",1000);
Run Code Online (Sandbox Code Playgroud)

做同样的事情,只有一个计时器.设置超时和eval一样有风险吗?

javascript eval settimeout setinterval

12
推荐指数
1
解决办法
1825
查看次数

为什么`$ @`不值得信任?

我似乎记得,相信之后的价值是不安全$@eval.关于信号处理程序$@在你看到它之前有机会设置的东西.我现在也太累了,懒得追查真正的原因.那么,为什么信任不安全$@呢?

perl eval exception race-condition

12
推荐指数
3
解决办法
1055
查看次数

eval,变量和引号的Bash问题

我一直在读这里和其他地方的bash引用,但我没有帮助解决这个问题.

问题是,我有一个小循环进行备份的脚本.

如果我不使用eval那么我有$OPTIONS变量的问题rsync.

但是如果我确实使用eval那么问题就变成了变量$CURRENT_DIR......

rsync返回以下消息:'Unexpected local arg:/ path/with'

我已经尝试过引用变量的各种方法 $CURRENT_DIR

CURRENT_DIR="/path/with spaces/backup"
DIR="dir_by_project"
f=":/home/project_in_server"
OPTIONS="-avr --exclude 'public_html/cms/cache/**' --exclude 'public_html/cms/components/libraries/cmslib/cache/**' --delete"
eval rsync --delete-excluded -i $OPTIONS  root@example.com$f $CURRENT_DIR/xxx/$DIR/files
Run Code Online (Sandbox Code Playgroud)

有没有办法可以使用变量$CURRENT_DIR而没有空格引起的问题?

bash rsync eval quoting

12
推荐指数
4
解决办法
3万
查看次数

Bash嵌套引号和eval

我在bash脚本中嵌套引号有困难

argv="su -c '$RVM_PATH wrapper $config_rvm \'$PASSENGER_RVM_BIN $command $options\'' web"
eval $argv
Run Code Online (Sandbox Code Playgroud)

以上得到了我

eval: line 162: unexpected EOF while looking for matching `''
eval: line 163: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)

bash quotes nested eval

12
推荐指数
3
解决办法
1万
查看次数

显示foreach/eval/call扩展的结果

我正在尝试为大型项目调试makefile,我正在努力define TEMPLATE/ endefforeach/ eval/ call构造.特别是我认为我很难弄清楚我需要引用哪些变量$以及需要引用哪些变量$$.

我认为如果我可以在变量扩展之前看到eval/ callexpansion 的实际结果,我会更容易调试.

举例来说,如果我们使用的例子EVAL文档,我们有以下的makefile片段:

 PROGRAMS    = server client

 server_OBJS = server.o server_priv.o server_access.o
 server_LIBS = priv protocol

 client_OBJS = client.o client_api.o client_mem.o
 client_LIBS = protocol
...
 define PROGRAM_template =
  $(1): $$($(1)_OBJS) $$($(1)_LIBS:%=-l%)
  ALL_OBJS   += $$($(1)_OBJS)
 endef

 $(foreach prog,$(PROGRAMS),$(eval $(call PROGRAM_template,$(prog))))
Run Code Online (Sandbox Code Playgroud)

我认为foreach在变量扩展之前,这应该有效地扩展到以下内容:

server: $(server_OBJS) $(server_LIBS:%=-l%)
ALL_OBJS   += $(server_OBJS)

client: $(client_OBJS) $(client_LIBS:%=-l%)
ALL_OBJS   += $(client_OBJS)
Run Code Online (Sandbox Code Playgroud)

我手动想出了上面的扩展(更正欢迎),但我正在寻找一种通用的方法来展示这个扩展以获得更复杂的例子.这种方法存在吗?

我已经研究过 …

debugging foreach makefile eval

12
推荐指数
1
解决办法
2148
查看次数