sub test_stuff { my($is_alive,$is_cool,$is_a_smurf,$is_a_moose) = @_; if ( $is_alive ) { print "It's alive!"; } elsif ( $is_cool || $is_a_smurf ) { print "It's either cool xor a smurf"; } elsif ( $is_a_moose ) { print "It's a moose"; } else { print "It's something strange :("; } } sub test_more_stuff { my($is_a_cow,$is_a_pow,$is_a_how,$is_a_now) = @_; if ( $is_a_cow ) { print "It's alive!"; } elsif { etc... etc...} } #### package main; use Rev::Bitmasks qw(ALIVE COOL SMURF MOOSE COW POW HOW BOW); sub test_stuff { my $persistent = shift; if ( $persistent & ALIVE ) { print "It's alive!"; } elsif ( $persistent & (COOL | SMURF) ) { print "It's either cool xor a smurf"; } elsif ( $persistent & MOOSE ) { print "It's a moose"; } else { print "It's something strange :("; } } sub test_more_stuff { my $persistent = shift; if ( $persistent & COW ) { print "It's alive!"; } elsif { etc... etc...} } package Rev::Bitmasks; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(ALIVE COOL SMURF MOOSE COW POW HOW BOW); sub ALIVE () { 1; }; sub COOL () { 2; }; sub SMURF () { 4; }; sub MOOSE () { 8; }; sub COW () { 16; }; sub POW () { 32; }; sub HOW () { 64; }; sub BOW () { 128; };