【发布时间】:2022-01-06 15:18:40
【问题描述】:
我正在尝试使用算术来评估写为字符串的 a 函数:
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
use feature 'say';
use autodie ':default';
my $str = '0.203580063041053 * $x + -0.0273785448865449';
my $x = 3;
my $ans = eval $str;
say $ans;
上述代码有效,并给出了正确答案。
然而,perlcritic 表示最好避免使用上述代码:Expression form of "eval" at line 10, column 11. See page 161 of PBP. (Severity: 5)
我已经阅读了 Perl 最佳实践的那部分,但它很长,我不明白它如何适用于我正在做的非常简单的情况。
那么什么是评估函数的好方法?
【问题讨论】:
-
也许使用例如编写自定义解析器
Marpa::R2或Regexp::Grammars? -
你如何得到这个字符串中的代码?整件事的目的是什么?
-
它产生 Perl 代码?那么是的,eval是合适的
-
那么这是一个 icky/hackish 的解决方案。特别是因为作为 Algorithm::CurveFit 基础的模块提供了编译后的 Perl subs 的方程。
-
明确地说,被标记的问题不是使用
eval来评估 Perl 代码,而是首先将 Perl 代码作为数据处理。
标签: perl perl-critic