Как я могу применить tr /// к каждому элементу массива Perl? - PullRequest
2 голосов
/ 19 декабря 2009

Есть ли лучший способ использовать tr /// для каждого элемента в массиве, чем следующий:

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

Я играю с некоторыми вещами, и я просто не могу выкинуть из головы, что это выглядит не совсем правильно / оптимально. Может быть, я просто думаю о том, как условные выражения можно использовать в форме суффикса. Кто-нибудь знает, есть ли способ использовать форму суффикса для tr /// или s ///?

Ответы [ 5 ]

10 голосов
/ 19 декабря 2009

Вы ищете:

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

, который в основном работает так же, как ваш код (каждый элемент @list имеет псевдоним $ _). В этом случае вам нужно встретиться только с Тимом Тоади и его братским близнецом Томом.

6 голосов
/ 19 декабря 2009

tr/abc/xyz/ for (@list); у меня работает.

4 голосов
/ 19 декабря 2009

Кто использует скобки с for, используемым в качестве модификатора оператора?

tr/abc/xyz/ for @list;

И, если вы играете в гольф, вы можете сохранить еще одного персонажа, используя y вместо tr.

0 голосов
/ 19 декабря 2009

Если вы хотите использовать его как выражение, я предпочитаю (выражение начинается с map).

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

Но вариант foreach, вероятно, самый простой способ, когда вы просто хотите изменить элементы в списке:

tr/abc/xyz/ foreach @list;
0 голосов
/ 19 декабря 2009

Я не большой поклонник for как модификатора оператора; Я не уверен, почему, так как в этом нет ничего плохого, он просто не говорит со мной таким естественным языком, как другие модификаторы операторов. Из-за этого я бы использовал map вместо:

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

Чисто вопрос предпочтений, и я публикую его здесь только в качестве примера. Другие ответы тоже хороши.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...