package Foo; use fields qw(a b c); sub new { fields::new(@_); } package main; my Foo $r = Foo->new(); $r->{d} = 1; # compile-time error $key = 'd'; $r->{$key} = 1; # run-time error