If the files are of a size where slurping isn't prohibitively expensive, you could do this:
use IO::Prompt::Tiny 'prompt'; use List::Util 'max'; use File::Slurp 'read_file'; my @files = map { my $fn = $ARGV[$_] // prompt 'Please enter filename #' . ( $_+1 ) +. ':'; read_file $fn, array_ref => 1, chomp => 1; } 0 .. 1; for( 0 .. max map { scalar @{$_} } @files ){ my $left_line = $files[0][$_] // ''; my $right_line = $files[1][$_] // ''; print "$_: $left_line\t$right_line\n"; }
Otherwise, you need to iterate over each, and detect when both file handles have been exhausted. But you must do it in a single pass. Your existing script has nested loops so that for each line in USER1, you attempt to read all of USER2.
If we can assume that user input comes from the command line, we can skip the prompting:
Dave
In reply to Re: Use 2 files and print each line of each one side-by-side
by davido
in thread Use 2 files and print each line of each one side-by-side
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |