in reply to Splitting a large file into smaller files according to indexes
Can't use string ("00000140") as a symbol ref while "strict refs" in use at ./partition_file.pl line 26, <$FH> line 6.
The code you posted doesn't produce this error message, it most likely stems from an earlier version of your program, in which you e.g. used $OUT overall instead of $NEW. In this case, in line 26, you would be trying to use a string as a filehandle.
Are you sure that your "mrule" tokens are grouped? If after mrule=150 some line containing mrule=140 is found further down in the source file, you overwrite the file 00000140.log with that line.
To avoid that, open a file for every mrule token and store the open filehandles in a hash:
my %fh; while ( my $line = <$FH> ) { if ( $line =~ /mrule=([0-9]+)/){ my $mrule = sprintf("%08d.log", $1); if ( ! $fh{$mrule} ) { open my $fh, '>', $mrule or die "Can't write to '$mrule': +$!\n"; $fh{$mrule} = $fh; } print {$fh{$mrule}} $line; } } close $fh{$_} for keys %fh; # close all files
Note the extra braces in the print statement around $fh{$mrule}. These are necessary to disambiguate $fh{$mrule} as being a filehandle rather than part of the LIST for print.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Splitting a large file into smaller files according to indexes
by cryptoperl (Novice) on Apr 10, 2018 at 20:38 UTC | |
by shmem (Chancellor) on Apr 12, 2018 at 11:31 UTC | |
by cryptoperl (Novice) on Apr 17, 2018 at 20:47 UTC | |
by shmem (Chancellor) on Apr 18, 2018 at 15:10 UTC |