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?
In reply to Multiple simultaneous filehandles by ezekiel
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |