Perl. Найти элемент массива и заменить его значение.

Perl. Найти элемент массива и заменить его значение.

Я новичок в перле. Встала задача найти первый найденных элемент в массиве, соответствующий некоторому значению и заменить значение этого элемента.

Для простоты задачи, взьмем массив:

Нужно найти в массиве @ma_arr первый элемент со значением test2 и заменить его значение на «best2». Як лучше всего на ваш взгдя такое проделать? И если можно, то маленький пример в студию).

foreach

// это мой первый кот на пердле

Сдеал сам, как у вас. А сейчас посмотрел - вариант от гоствизида очень хорош.

Всем спасибо, помогли.

Стой. Какой объем массива? Еще может быть вариант через hash с индексацией, когда данных немеренно и много повторений. Как-то так: http://ideone.com/51SxEV

А теперь по сути и по треду:

1) Не используй двойные кавычки в строках, где тебе НЕ нужна интерполяция.2) Константы заноси в readonly переменные3) Регулярные выражения медленнее, чем выполненная задача вручную4) Не стоит использовать сторонние модули в простых задачах, даже если они есть в стандартной комплектации5) Всегда пользуйся use strict; use warnings;6) Не используй /usr/bin/env

даже если они есть в стандартной комплектации

Ну а теперь превратим тред в олимпиаду: newquestion , реквестую версию на жс

потому что оверхед

Ну а теперь превратим тред в олимпиаду: newquestion, реквестую версию на жс

а чего не на си? я бы поучаствовал

Только за! и цацкелистов позови

Отличные советы по коду, спасибо, учту.

полагаю что учитывая что язык и так perl о производительности речь не идёт

Ничего против. Лишняя сущность, у тех, кто балуется и не следует кодексу «мусор на входе — мусор на выходе». И что-то у дело со словами расходится:

Не стоит использовать сторонние модули в простых задачах, даже если они есть в стандартной комплектации

Это тоже, так к слову. Без обид.

почитай о константах в перле. Так, на всякий.

так что? мне уже начинать велосипедить?)

ух ты, прикольно!можешь последовательно объяснить что происходит? начиная от «@a»

нужен анонiмас для разогрева публики

ух ты, прикольно! можешь последовательно объяснить что происходит?

к чему твоё сообщение?

еще царя вспомни

В продакшн коде (модули из CPAN) нынче используется тренд через sub MY_CONST < 42 >или use constant . Те, кто использует константы на массивы, хэши либо не понимают, что делают, либо гики свихнувшиеся на модулях типа Readonly. В крайнем случае, имхо, лучше использовать напрямую use Internals или аналоги. Я может не прав, но не видел в живую ни одного модуля, где используют константы на массивах или хэшах (мне даже самому интересно как и почему, зачем, с радостью почитаю код).

Более того, если говорить о перформансе, то в перле всем плевать на перформанс, до тех пор пока модуль не написан на XS. Pure Perl тормоз by design. Тут даже спорить не о чем. Проблемы не использовать XS-модули это проблемы не осиляторства, либо какие-то искуственные ограничения, либо неверно выбранный инструмент. Пример из вакуума, но ненадуманный, скажем использовать perl на android, вот на кой хер нужен там perl, когда есть Dalvik? А если есть возможность, то сразу писать код на NDK.

Те, кто использует константы на массивы, хэши

ээ. константы на массивы? что? я не предлагал использовать константные массивы или хеши, только лишь как переменные (константы, прости Г-ди).

Если кратко ответить на твой пост, то я курнул pbp, и на моей работе это одобряют. И пока это давало лишь позитивный результат. Хз как сейчас практикуют перл в мире, мне сравнивать особо не с чем.

да это я по доброму шуткую

ревью не прошёл, таск реопен

  • нет гарантии что во входных данных нет строки с ','
  • хардокод: 'test2' тоже должен подаваться из вне

Переписывай!

Флаг g убери, там только первое вхождение меняется.

Согласен. Ляпнул не подумав.

If afterItem is not found, item is appended to the end of the list.

Тебя нельзя допускать к коду.

ГЛОБАЛЬНАЯ ТЕОРИЯ ИДЕАЛЬНОГО КОДА И ДАННЫХ

допускающий: нулевой балабол, ниасиливший программирование

анонiмус не смог пройти квест TrueTsar1C78 , твой выход

На пожри l contains("test2") ifTrue(l insertAfter("best2", "test2") removeFirst("test2") )

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

То есть, даже будучи облеванным, ты все равно продолжаешь? Прям как боевой петушок, так держать.

кстати, а че ты не подумал, что будет тут

Мой ответ был на то, что да, многие согласны, что use constant имеет недостатки. С другой стороны, если использовать альтернативы, то лучшая альтернатива это sub MY_CONST < 42 >. Минус ее в том, что а) выделяет лишние 500кб памяти; б) на критичном коде это решение тормоз. На оба этих случая забивают и не обращают внимания. Никаких best practice, никаких внесений лишних сущностей. Потому что код на XS единственное верное решение, чтобы разрулить проблемы выше. От того, что перформанс спадет на 20% в случае с sub , тогда когда разница по сравнению с XS в 1000%, это капля в море. Плюсом же такого решения является простота и отсутствие зависимостей. Как практика показывает, вносить XS-код (тот же Internals) можно не во всех окружениях. И да, этот модуль используется предложенным тобой Readonly. Помимо того, этот модуль (Readonly) еще использует tie-интерфейс, который скорей всего даже хуже sub (надо бенчить, без б).

а ты я смотрю не в конец конченый молодец

я смотрю, спец. олимпиада отменяетсяЖаль, а я так хотел повелосипедить сегодня. :)

Видимо, мой опыт в perl всё еще достаточно скудный. Спасибо за разъяснение! Пригодится

📎📎📎📎📎📎📎📎📎📎