I have a tab-delimited text file of an unspecified number (say x) columns. I want to split this into x-1 separate tab-delimited text files where the first file contains just the first and second columns, the second file contains the first and third columns, etc.
As I don't know the number of columns in advance, the filehandles for the output files have to be variables. So I have the following code:
use strict;
my $number_of_files = 0;
while (<STDIN>) {
chomp;
my @line = split;
# On the first list, set up the process
if ($. == 1) {
for (my $i = 1; $i < @line; $i++) {
my $fh = "OUTPUT" . $i;
my $filename = $line[$i] . ".txt";
open ($fh, ">$filename") or die "Cannot open the output fi
+le: $!";
}
$number_of_files = @line;
}
else {
for (my $i = 1; $i < @line; $i++) {
my $fh = "OUTPUT" . $i;
print $fh ("$line[0]\t$line[$i]\n");
}
}
}
for (my $i = 1; $i <= $number_of_files; $i++) {
my $fh = "OUTPUT" . $i;
close $fh or die "Cannot close the output file: $!";
}
The problem is I get a "Can't use string ("OUTPUT1") as a symbol ref while "strict refs" in use" error. Where have I gone wrong?