You want a hash of arrays. That simplifies the logic and puts the data all in one place.
my %data = (
foo1 => [
'1 - 201 - 229',
'2 - 201 - 229',
'3 - 201 - 229',
],
foo2 => [
'1 - 201 - 218',
'2 - 201 - 218',
'3 - 201 - 218',
'4 - 201 - 218',
'5 - 201 - 218',
'6 - 201 - 218',
'7 - 201 - 218',
],
# . . .
);
Then you can just say,
my @act_bsites = @{$data{$dataset}};
If the 1-150 ordering is natural and important, you may want to drop the 'foo' part of the designation and use an array instead of a hash.
Update: I don't understand how hardcoding the data in an extended if-else construct improves anything with respect to hard-won data. Here's a version with a seperate data file:
# file: /path/to/foosites
{
foo1 => [
'1 - 201 - 229',
'2 - 201 - 229',
'3 - 201 - 229',
],
foo2 => [
'1 - 201 - 218',
'2 - 201 - 218',
'3 - 201 - 218',
'4 - 201 - 218',
'5 - 201 - 218',
'6 - 201 - 218',
'7 - 201 - 218',
],
# . . .
};
and then in your code it can be as simple as,
my @act_bsites = @{(do '/path/to/foosites')->{$dataset}};