/* mytest.h */ enum { a = 10, b, c, d, efg, hijk }; /* unnamed */ enum Temperature { temp_low, temp_medium, temp_high }; enum Othertest { frank, john, kurt, jason }; #### #!/usr/bin/env perl use strict; use warnings; use v5.12; use Convert::Binary::C; use Hash::Util qw/lock_hash/; my %C_ENUMS; { my $c = Convert::Binary::C->new->parse_file( 'mytest.h' ); %C_ENUMS = map %{ $_->{enumerators} || {} }, $c->enum; lock_hash( %C_ENUMS ); } say "'efg' is $C_ENUMS{efg}"; say "'kurt' is $C_ENUMS{kurt}"; eval{ $C_ENUMS{kurt} = 15; }; print $@ if $@; say "'kurt' is $C_ENUMS{kurt}"; #### 'efg' is 14 'kurt' is 2 Modification of a read-only value attempted at mytest.pl line 22. 'kurt' is 2 #### use strict; use warnings; use v5.12; BEGIN{ use Convert::Binary::C; my $c = Convert::Binary::C->new->parse_file( 'mytest.h' ); my %c_enums = map %{ $_->{enumerators} || {} }, $c->enum; eval "use constant $_ => $c_enums{$_};" for keys %c_enums; } say "efg => ", efg; say "kurt => ", kurt; #### efg => 14 kurt => 2