Sowohl bei @test als auch bei $test[] handelt es sich im Prinzip um die selbe Variable. Allerdings wird einmal auf den ganzen Array @test und das andere mal auf ein einzelnes Element des Arrays - z.B. $array[5] - zugegriffen.
In dem von dir geposteten Beispiel wird die Sache noch etwas komplizierter (und IMHO vom Stil her schlecht). Nehmen wir uns erst einmal @test vor. Das ist ein Array. Normalerweise würde dieser eine Liste seiner Elemente zurückgeben. Nun ist es aber in Perl so, dass jede Funktion, Variable, etc. weiß, was man von ihr erwartet. In diesem Speziellen Fall, erwartet perl an dieser Stelle keine Liste, sondern einen Scalar - also einen einzelnen Wert. Wenn man einen Array in so einem "scalaren Kontext" setzt, liefert er keine Liste mehr zurück, sondern die Anzahl seiner Elemente. Diese Zahl wird jetzt als Index für $test[] verwendet. Da die Zahl der Elemente eines Arrays im Normalfall dem nächsten undefinierten (leeren) Index entspricht (Arrays fangen normalerweise bei null und nicht bei einsan zu zählen) wird mit diesem Code also der Array "test" mit den Zahlen von eins bis fünf gefüllt. Die Anführungszeichen um $i erfüllen dabei soweit ich sehen kann keinen Sinn.
Schlechter Stil ist das deshalb, weil ein Array in Perl nicht unbedingt mit dem Index null beginnen muss. Robuster währe folgendes:
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B