首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复perl eval()中的“Bareword found”问题

如何修复perl eval()中的“Bareword found”问题
EN

Stack Overflow用户
提问于 2021-10-22 05:08:39
回答 1查看 102关注 0票数 0

下面的代码返回"Bareword在(eval 1)第1行,靠近"*,out“(out之前缺少运算符?)找到了预期的运算符”

代码语言:javascript
复制
$val = 0;
$name = "abc";
$myStr = '$val = ($name =~ in.*,out [)';
eval($myStr);

根据我的理解,我可以通过用‘//’包装"in.*,out [“块来解决这个问题。

但是"in.*,out [“可以是不同的。(例如:用户输入)。用户可能会错过给出‘//’。因此,有没有其他方法来处理这个问题。?(例如:如果eval()试图返回'Bareword found where ...‘,则返回0。)

EN

回答 1

Stack Overflow用户

发布于 2021-10-22 13:54:07

以下代码不是有效的Perl代码:

代码语言:javascript
复制
$val = ($name =~ in.*,out [)

您需要以下内容:

代码语言:javascript
复制
$val = $name =~ /in.*,out \[/

(父母是无害的,但也没有帮助。)

如果该模式是用户提供的,则可以使用以下内容:

代码语言:javascript
复制
$val = $name =~ /$pattern/

(不需要eval EXPR!)

从更正中注意到问题中的模式不正确。您可以使用eval BLOCK捕获此类错误

代码语言:javascript
复制
eval { $val = $name =~ /$pattern/ };
die("Bad pattern \"$pattern\" provided: $@") if $@;

关于用户提供的模式的注意事项:上面的代码不会让用户执行任意代码,但它也不会保护您免受比整个宇宙的生命周期更长的模式的影响。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69671686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档