@a = qw[a simple list]; warn join ' ', @a; # "a simple list" Internals::SvREADONLY(@a, 1); # Make the list RO (doesn't matter here, actually) Internals::SvREADONLY($a[1], 1); # Make our target element RO (double sure!) warn '@a is ' . (Internals::SvREADONLY(@a) ? '' : 'not ') . 'read-only'; splice(@a, 1, 1, qw(not quite readonly)); warn join ' ', @a; # "a not quite readonly list" warn '@a is ' . (Internals::SvREADONLY(@a) ? '' : 'not ') . 'read-only'; unshift @a, qw*this is*; __END__ a simple list at 1167665-reply.pl line 2. @a is read-only at 1167665-reply.pl line 5. a not quite readonly list at 1167665-reply.pl line 7. @a is read-only at 1167665-reply.pl line 8. Modification of a read-only value attempted at 1167665-reply.pl line 9.