/* 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