my $bitfield = 1; my $modifier = '+2+16+1024'; my @fields = ( $modifier =~ m{ ([+-]) (\d+) }gxms ); # extract mods while ( @fields >= 2 ) { # for each modification my $op = shift @fields; my $value = shift @fields; if ( $op eq '+') { $bitfield |= $value; # set a bit w/ OR } } print "bf: $bitfield\n"; __END__ bf: 1043