=pod Solution to PERM Rosalind problem Generates permutations from 1 to n and totals them Author: Peter Vlasveld =cut #!/usr/bin/perl use strict; use warnings; #Get number from file open(IN, "rosalind_perm.txt") or die "Couldn't open the file"; my $number = ; close IN; #create number array my @array = (1..$number); #create global variable for return array my @finalArr = (); #open output file for writing open(OUT, ">output.txt") or die "Couldn't open output file"; #print result of perm subroutine print OUT perm(\@array, 0), "\n"; #print array of permutations for (@finalArr){ print OUT "@{$_}\n"; } #close output file close OUT; #Recursive permutation subroutine sub perm{ #declare sub variables my ($arr_ref, $num) = @_; my $count = 0; #dereference input array my @arr = @{$arr_ref}; #base case - when num = length of array if ($num == $#arr) { push @finalArr, \@arr; return 1; } else { #perform a swap of num and each other number in the array, and then call the next instance of the sub for ($num..$#arr){ ($arr[$num], $arr[$_]) = ($arr[$_], $arr[$num]); $count += perm(\@arr, $num+1); } #eventually returns number of permutations return $count; } }