sub fredekin { my ($a,$b,$c) = @_; return (($a) ? ($a,$c,$b) : ($a,$b,$c)); } sub toffoli { my @list = @_; my $tail = pop @list; my $state = 0; for my $i (@list) { $state++ if ($i); } if ($state == @list) { $tail = ($tail) ? 0 : 1; } return ((@list, $tail)); }