The reason is this portion of code:
foreach my $single (@sw) {
You don't have a closing bracket before:
for $a (1 .. 2) { # a has 2 levels:
for $t (1 .. 2) { # t has 2 levels:
for $g (1 .. 2) { # g has 2 levels:
for $c (1 .. 2) { # c has 2 levels:
$combi=sprintf($new_four,$a,$t,$g,$c,3-$a,3-$t,3-$g,3-$c);
print"~$combi\n";
print $fh "~$combi\n";
It's the way the loops are arranged, that's all. You can see this more easily by using the perl debugger or print statements to see the values of $new_four at each iteration, etc.