【发布时间】:2017-10-20 07:58:00
【问题描述】:
所以I answered a question on SO and got a lot of flack for it。 我已经使用 Perl 很多年了,并且经常使用这种主题化。
让我们从一些代码开始。我在这些示例中进行搜索和替换。这个想法是从两个字符串中搜索one和three并替换它们。
$values = 'one two three four five';
$value2 = 'one 2 three four 5';
$values =~ s/one//g;
$values =~ s/three//g;
$values2 =~ s/one//g;
$values2 =~ s/three//g;
这段代码很简单,大家都接受。
我还可以构建一个数组或散列,其中包含要搜索和替换的值列表,这也是可以接受的。
但是,当我构建一个脚本来主题化 $values 和 $values2 并减少构建脚本的输入量时,它似乎被误解了?
这里是代码。
$values = 'one two three four five';
$value2 = 'one 2 three four 5';
for ( $values, $values2 ) {
s/one//g;
s/three//g;
}
上面的代码将在for 块期间对变量进行主题化,但许多程序员反对这一点。我想了解为什么这是不可接受的?
【问题讨论】:
-
好吧。一方面,通过就地改变事物,你有点生活在边缘,但这本身当然不是问题。这样的代码很容易演变成维护者的陷阱;这是一个问题。您展示的示例并没有为您节省太多,并且比其他方式不太清楚。但是,当这正是需要做的事情时,我会毫不犹豫地做
s/$patt/$repl/ for @ary。我的 .02 -
我找到了您的答案并将其链接。两件事:只有一个人不喜欢它,其中的代码与您在这里发布的不同。
-
我同意主要方面是它让维护人员感到困惑。如果我在
$work的代码库中遇到这段代码,我会重构它。 -
谢谢@simbabque。你们帮我确认了我的想法:)
-
@zdim: “这样的代码很容易演变成维护者的陷阱” 那么你反对使用
$_吗?否则我看不到你的意见?