2009-12-19 87 views
2

有数组中的比每个元素上使用TR ///一个更好的方法如下:如何将tr ///应用于Perl数组的每个元素?

foreach (@list) { 
    tr/abc/xyz/; 
} 

我有一些东西玩耍,我只是不能把它弄出来我的头它看起来不太正确/最佳。也许我只是在考虑如何在后缀表单中使用条件。任何人都知道是否有一种方法来使用tr ///或s ///的后缀形式?

+2

这确实很有诱惑力的要崩溃了操作下来一行,并删除所有不必要的大括号,不是吗?欢迎来到Perlish Perl,你的生活将永远不会相同:) – Ether 2009-12-19 10:12:49

回答

10

你是否在寻找:

tr/abc/xyz/ foreach (@list); 

基本上以同样的方式为你的代码(的@list每个元素别名为$ _)。在这种情况下,你只能见到Tim Toady和他的兄弟姐妹Tom。

+3

你也可以省略圆括号。 – Tordek 2009-12-19 08:19:12

+0

我试过这种方式,但它昨晚对我不起作用,这就是我发布这个问题的原因。现在我已经睡了一觉,实际上我可以弄清楚错误信息的含义。我在那里有一个C风格的评论,这就是它吓坏了。它认为斜线是另一个运营商。 对不起,浪费大家的时间与这一个。 s/me /睡眠剥夺的noob /; – David 2009-12-19 15:24:19

+0

不用担心。睡眠(和食物)能产生多大的差异是惊人的。 – outis 2009-12-19 22:06:02

6

tr/abc/xyz/ for (@list);适合我。

4

谁使用括号for作为语句修饰符?

tr/abc/xyz/ for @list; 

而且,如果你打高尔夫球,你可以通过使用y代替tr保存一个或多个字符。

+0

...并保存2个没有空白的文件:y/abc/xyz/for @ list; – toolic 2009-12-19 15:52:19

0

我不是for作为语句修饰符的巨大粉丝;不知道为什么,因为它没有什么不对,它只是没有用其他语句修饰符所做的那种自然语言的方式告诉我。正因为如此,我会使用map代替:

map(tr/abc/xyz/, @list); 

纯粹是偏好的事,我张贴在这里仅作为例子。其他答案也很好。

+3

地图的目的是回报一些东西。无效环境中的映射不被视为“最佳实践”。 – runrig 2009-12-20 02:33:43

+1

然而,在最近的Perls中,它并没有创建一个临时数组,并且实际上被一个for循环替换。我认为使用表达式而不是块地图更糟糕! – rjh 2009-12-22 14:33:15

+0

@rjh:我不确定你对第二句话的含义。你能解释一下吗?我总是喜欢学习更多 - 谢谢! – 2009-12-23 01:33:33

-1

如果你想要它作为表达式,那么我更喜欢(表达式开始于map)。

my @trlist = map { tr/abc/xyz/; $_ } @list; 

foreach品种可能是当你只是想改变在列表中的项目最简单的方法:

tr/abc/xyz/ foreach @list; 
+1

这不符合你的期望,当你遍历数组时,$ _是元素的引用。换句话说,在这个例子中@list仍然是音译的,但是拷贝被分配给@trlist。它速度较慢,需要更多内存并且增益为0。 – 2009-12-20 20:11:42

+0

@EvanCarroll:它的确符合我的期望。就像我说的那样,它以*表达*的形式表现。 – Axeman 2009-12-22 10:18:26

相关问题