下面的代码返回"Bareword在(eval 1)第1行,靠近"*,out“(out之前缺少运算符?)找到了预期的运算符”
$val = 0;
$name = "abc";
$myStr = '$val = ($name =~ in.*,out [)';
eval($myStr);根据我的理解,我可以通过用‘//’包装"in.*,out [“块来解决这个问题。
但是"in.*,out [“可以是不同的。(例如:用户输入)。用户可能会错过给出‘//’。因此,有没有其他方法来处理这个问题。?(例如:如果eval()试图返回'Bareword found where ...‘,则返回0。)
发布于 2021-10-22 13:54:07
以下代码不是有效的Perl代码:
$val = ($name =~ in.*,out [)您需要以下内容:
$val = $name =~ /in.*,out \[/(父母是无害的,但也没有帮助。)
如果该模式是用户提供的,则可以使用以下内容:
$val = $name =~ /$pattern/(不需要eval EXPR!)
从更正中注意到问题中的模式不正确。您可以使用eval BLOCK捕获此类错误
eval { $val = $name =~ /$pattern/ };
die("Bad pattern \"$pattern\" provided: $@") if $@;关于用户提供的模式的注意事项:上面的代码不会让用户执行任意代码,但它也不会保护您免受比整个宇宙的生命周期更长的模式的影响。
https://stackoverflow.com/questions/69671686
复制相似问题