perl - 我怎样才能避免在 Perl 中使用 "eval"?

标签 perl eval

我有这样的代码:

my @e = ( '($i,$j, $k,$l)',  '($i,$k, $j,$l)',  '($i,$l, $j,$k)',
          '($j,$k, $i,$l)',  '($j,$l, $i,$k)',  '($k,$l, $i,$j)'
        );
#
# Assign various sets of values to $i,$j,$k,$l
#
        foreach ( @e ) {
          my ($a,$b, $c,$d) = eval $_;
#
# Do calculations based on the values of $a,$b,$c,$d
#

一切如我所愿。但是这样用eval感觉很笨拙。我觉得必须有更好的方法来遍历这四个值的六个排列。我尝试了各种方法,但没有发现任何有效的方法,所以我转而使用 eval。

最佳答案

我可能会选择潜艇。

my @e = (
   sub { @_[ 0,1, 2,3 ] },
   sub { @_[ 0,2, 1,3 ] },
   sub { @_[ 0,3, 1,2 ] },
   sub { @_[ 1,2, 0,3 ] },
   sub { @_[ 1,3, 0,2 ] },
   sub { @_[ 2,3, 0,1 ] },
);

...

for (@e) {
   my ( $a,$b, $c,$d ) = $_->($i, $j, $k, $l);
   ...
}

如果值已经在一个数组中,上面的简化为:

my @e = (
   [ 0,1, 2,3 ],
   [ 0,2, 1,3 ],
   [ 0,3, 1,2 ],
   [ 1,2, 0,3 ],
   [ 1,3, 0,2 ],
   [ 2,3, 0,1 ],
);

...

for (@e) {
   my ( $a,$b, $c,$d ) = @v[$_];
   ...
}

如果我们要处理更多值,我会考虑一种生成突变的编程方法,但我想不出足够简单的方法值得。

关于perl - 我怎样才能避免在 Perl 中使用 "eval"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63671635/

相关文章:

perl - 为什么一个模块可以自行编译,但在其他地方使用时会失败?

php - 将 BASH 关联数组传递给 PHP 脚本

perl - 在 Perl 中,如何设置 HTTP POST 参数以在本地伪造 HTTP 环境?

python - 打印 snmpwalk 结果的数量

asp.net - Gridview ItemTemplate中的多个评估字段的最佳技术?

r - 使用 R 中的数据掩码评估最大似然表达式

javascript - 解决我的 chrome 扩展中的 eval()

c# - 在 ASP.NET 中使用 ItemTemplate 参数执行方法

perl - 如何在原型(prototype)检查中作弊?

mysql - 处理 sql 错误(如果存在,如果约束),Perl