good comments above -- i too immediately thought of the ternary operator, but i like your hash solution, too. Note there is a significant difference between the hash and the conditional (if/else or ternary), and that is if
$some_variable for some reason is not 'x' or 'y'. With the hash, you'll get
undef, and with the conditional you will by defauly get the value corresponding to 'y'. This may or not may be a big deal--depends on the context.
also note that you can combine the hash and 'use constant' solutions and do:
use constant COUNTS => {
x => 14,
y =>9,
};
...
foreach my $i ( 0 .. ${&COUNTS}{$some_variable} ){
...
}