2009-12-19 99 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

相關問題