I'm trying to get a script to read a list of files from the command line or accept a list from STDIN (e.g. ls -1 | script.pl):
if (@ARGV){ foreach my $path(@ARGV){ $path=File::Spec->rel2abs($path); } $passhash{filearrayref}=\@ARGV; } elsif ($passhash{stdin}){ # flag to indicate input from stdin my $i=0; foreach my $path(<>){ chomp($path); $path=File::Spec->rel2abs($path); $passhash{filearrayref}[$i]=$path; $i++; } } else {die ("No input files specified.\a\n");}
The script subsequently asks for further input from STDIN (in a separate, unrelated subroutine):
The problem is that the second input gets ignored. The script doesn't wait for user input at all. In fact it behaves as though the variable $answer is never initialised. I'm using strict and warnings, and it tells me:print STDERR ("Directory \'$$pref{changedir}\' aleady exists. Overwrit +e?\n". "[Y(es)/N(o)/R(eselect destination)/C(lobber all duplicates)]". "\a\n"); my $answer = <STDIN>; chomp ($answer); # line 106 (see below) print "$answer\n"; # for testing purposes
Use of uninitialized value in scalar chomp at script.pl line 106.
This problem doesn't occur if the flag variable $passhash{stdin} is not set. It looks suspiciously like the problem Sojourner described here, but the solution in that case (use CGI.pm) doesn't seem to apply here (this thing's going nowhere near a web site).
I'm sure I'm missing something simple here, but I can't for the life of me figure out what it is. Any help would be greatly appreciated.
Thanks.
In reply to STDIN following on? by tfrayner
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |