tfrayner has asked for the wisdom of the Perl Monks concerning the following question:
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.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: STDIN following on?
by CheeseLord (Deacon) on Aug 10, 2001 at 22:54 UTC | |
by tfrayner (Curate) on Aug 10, 2001 at 23:03 UTC | |
by CheeseLord (Deacon) on Aug 10, 2001 at 23:18 UTC | |
by tfrayner (Curate) on Aug 10, 2001 at 23:22 UTC | |
by dragonchild (Archbishop) on Aug 10, 2001 at 23:33 UTC | |
| |
|
Re: STDIN following on?
by tfrayner (Curate) on Aug 11, 2001 at 20:18 UTC |