So wie du versuchst wird es niemals funktionieren. Denn
Dein String ist länger als zweimal acht Zeichen und die Regexp wird niemals matchen.
Wenn du kein übertrag in eine variable möchtest dann mußt du schon "(?:0[8})" schreiben. Aber wenn ich dich richtig verstehe, dann willst du immer nur die ersten acht zeichen haben und nicht die Zeichen 9-16
Wenn dui die zeichen "0" und "1" finden willst schreibe das so: "[01]". "[0-1]" geht zwar auch, ist aber unnötig kompliziert und aufwändig für den Parser.
Dann wäre da noch das fehlende ";". Der Code wird so nie funktionieren. Wenn du die Moodule "strict" und "warnings" benutzen würdest würde er schon da ordentlich mosern.
Du mußt das ganze etwas anders angehen:
#!/usr/bin/perl
use strict;
use warnings;
my $a = "0000001111000010000001111110";
if($a=~/^[01]{8}/ and $a!~/^0{8}/)
{ print "gematched\n"; }