Когда константа константна

Жил был кусок кода, и все прекрасно работало. Но потом я решил добавить еще одно сообщение об ошибке и получил от перлы (во время исполнения) вот такое:
Modification of a read-only value attempted at ... line 24.
Вот собственно код который генерировал ошибку:

  1. sub _out ($@) {
  2. my $l = shift;
  3. return if $level < $l;
  4. # empty line
  5. $_[-1] =~ s/\n$//;
  6. print STDERR @_, "\n";
  7. }

Писал я этот код давно ну и полез разбиратся что же попадает в эту фунцию в качестве последнего параметра. Каково же было мое удивление когда я обнаружил что туда попадают только строки. О_о Хммм. А почему небыло ошибки раньше? Для того что б убедится в своих подозрениях я написал два 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.

как один из вариантов создания такой изменяемой строки может быть просто добавление структуры @{[]} в начало строки.
Например

sub out {
    $_[-1] =~ s/(.)/\u$1/g;
    print @_
}
$\ = "\n";
out("@{[]}qwerty asd q");

Правда практическое применение этой фичи еще не придумано ;)