$ perl *ro = \'readonly_dynamic'; print "=$ro=\n"; defined eval {$ro = 'newval'} or print "Exception: $@"; ^D =readonly_dynamic= Exception: Modification of a read-only value attempted at - line 4. #### $ perl use Lexical::Alias; # 5.8+, see pod my $ro; alias ${\'readonly_lexical'}, $ro; print "=$ro=\n"; defined eval {$ro = 'newval'} or print "Exception: $@"; ^D =readonly_lexical= Exception: Modification of a read-only value attempted at - line 8. #### $ perl use Array::RefElem qw/av_store hv_store/; hv_store %h, 'ro', ${\'readonly_hashval'}; av_store @a, 5, ${\'readonly_aryelem'}; print "=$h{ro}=$a[5]=\n"; defined eval {$h{ro} = 'newval'} or print "Exception: $@"; defined eval {$a[5] = 'newval'} or print "Exception: $@"; ^D =readonly_hashval=readonly_aryelem= Exception: Modification of a read-only value attempted at - line 7. Exception: Modification of a read-only value attempted at - line 9.