Жил был кусок кода, и все прекрасно работало. Но потом я решил добавить еще одно сообщение об ошибке и получил от перлы (во время исполнения) вот такое:
Modification of a read-only value attempted at ... line 24.
Вот собственно код который генерировал ошибку:
sub _out ($@) { # empty line }
Писал я этот код давно ну и полез разбиратся что же попадает в эту фунцию в качестве последнего параметра. Каково же было мое удивление когда я обнаружил что туда попадают только строки. О_о Хммм. А почему небыло ошибки раньше? Для того что б убедится в своих подозрениях я написал два 1лайнераи запустил их.
Первый выдал то что и ожидалось:
$ perl -e 'sub out { $_[-1] =~ s/(.)/\u$1/g; print @_ } $\ = "\n"; $x = "asd"; out("qwerty asd q"); print $x' Modification of a read-only value attempted at -e line 1.
А вот второй... :
$ perl -e 'sub out { $_[-1] =~ s/(.)/\u$1/g; print @_ } $\ = "\n"; $x = "asd"; out("qwerty $x q"); print $x'
QWERTY ASD Q
asdВот такие у нас интерполируемые строки хитрые.

P.S.
как один из вариантов создания такой изменяемой строки может быть просто добавление структуры
@{[]}в начало строки.Например
Правда практическое применение этой фичи еще не придумано ;)