If you can decide at command line time which type of input to use, e.g. using | or a file, then why not write your script to use GetOpts::Std
Then you can use the -w as usual, and create a new switche (-f <$filename> for file) and no switch for STDIN. Then in your script you can simply check for the -f switch. If I've misread anything, or have oversimplified please blame it on my cold and long day:-) Marty --- Schuyler Bishop <[EMAIL PROTECTED]> wrote: > Hello, > > Long-time perl wanna-be-hacker, first time poster > here. > > This script is running on a Sunblade 100 running > Solaris 9 and the current > sun version of perl(based on recommended patch > clusters) - 5.6.1. > > I've got a script where I'm trying to read a list of > files and switches, > sometimes from <STDIN> and sometimes from @ARGV. > Here's the part of the > script where I check to see if STDIN is a file and > read info from @ARGV: > > --------- Begin ------- > if (-f){ > print "STDIN is a file...\n"; > while (<STDIN>) { > chomp; > $use_stdin = "y"; > push @files, $_; > } > $numArgs = $#files + 1; > } > if (!defined @ARGV && !-f) { > die "$usage"; > } > if (!defined $numArgs) { > $numArgs = $#ARGV + 1; > } > > ARG_LOOP: foreach $argnum (0 .. $#ARGV) { # Do stuff > with the command line > arguments > > my $num_min_args = 1; > if ($ARGV[$argnum] eq "\-h") { > die "$usage\n-w ==> Enable web directory storage. > This option will > place output files in the web\/ directory under > PMs.\n[Input files] ==> A > list of .fig files which are wished to be converted > to pdf files. Each > xxx.fig will be converted to xxx.pdf.\n\n"; > } > elsif ($ARGV[$argnum] eq "\-w") { > $webdir = "y"; > } > elsif ($numArgs < $num_min_args && $use_stdin ne > "y") { > print "\nYou need more arguments - you only gave > us $numArgs and we need > $num_min_args.\n"; > die "$usage"; > } > elsif ($use_stdin ne "y") { > push @files, $ARGV[$argnum]; > } > else { > last ARG_LOOP; > } > } > print "Got $numArgs files to process...\n"; > > ------ End ------- > > So - the jist of it is I wish to send a list of > files to be converted > either by <STDIN> or @ARGV, and have the script > figure it out based on > which I pass it. The main reasoning (which may be > flawed) I have is that > I want to be able to pass it an argument of files > (ie fig2pdf.pl *.fig) or > pass it a pipeline (ie find . -name "*.pdf" | > fig2pdf.pl) but either way I > need to also be able to send it a -w switch. > > I've googled this pretty extensively and searched > the archives equally > vigorously and came up with the 'if (-f)', but > neither that nor 'if (-t) > seem to ever return a 1 so that the loop is > executed. > > Here's the entirety of my code below if you're > interested. Apologies in > advance - I wrote this in about an hour total and > haven't spent much time > debugging it. > > #!/usr/bin/perl -w > # > # Written Mon, Sep 20, 2004 by Schuyler Bishop > # > # SCCS ID %W% %G% > # > use strict; > my ($use_stdin, $argnum, $pdffile); > my $numArgs; > my $fig2ps = "/imc/data1/bin/grbatch -device 1 "; > my $webdir = ""; > my @files=(); > my $pwd = `pwd`; > chomp $pwd; > my @pwd_split = split /\//, $pwd; > print "\n"; > my @scr_split = split /\//, $0; > my $script = $scr_split[-1]; > my $usage = "\nUsage: $script [-w] [-h] [Files to > convert]\n\n"; > > if (-f){ > print "STDIN is a file...\n"; > while (<STDIN>) { > chomp; > $use_stdin = "y"; > push @files, $_; > } > print "\$numArgs = $#files + 1\n"; > $numArgs = $#files + 1; > } > if (!defined @ARGV && !-f) { > die "$usage"; > } > if (!defined $numArgs) { > $numArgs = $#ARGV + 1; > } > > ARG_LOOP: foreach $argnum (0 .. $#ARGV) { # Do stuff > with the command line > arguments > > my $num_min_args = 1; > if ($ARGV[$argnum] eq "\-h") { > die "$usage\n-w ==> Enable web directory storage. > This option will > place output files in the web\/ directory under > PMs.\n[Input files] ==> A > list of .fig files which are wished to be converted > to pdf files. Each > xxx.fig will be converted to xxx.pdf.\n\n"; > } > elsif ($ARGV[$argnum] eq "\-w") { > $webdir = "y"; > } > elsif ($numArgs < $num_min_args && $use_stdin ne > "y") { > print "\nYou need more arguments - you only gave > us $numArgs and we need > $num_min_args.\n"; > die "$usage"; > } > elsif ($use_stdin ne "y") { > push @files, $ARGV[$argnum]; > } > else { > last ARG_LOOP; > } > } > print "Got $numArgs files to process...\n"; > > foreach $pdffile (@files) { > print "\nWorking on $pdffile ...\n"; > my $relative; > my @path; > my $dir; > if ($pdffile =~ "\/") { > @path = split /\//, $pdffile; > } > else { > $path[0] = $pdffile; > } > my $basedir; > if ($path[0] eq "." || substr($path[0], 0, 1) ne > "\/") { > $relative = "y"; > } > if ($webdir eq "y") { > foreach $dir (@path) { > if ( $dir =~ /PMs/ && $relative ne "y") { > $basedir = "$pwd/$basedir/web"; > } > elsif ($#path eq 0){ > my $pwd_dir; > foreach $pwd_dir (@pwd_split){ > if ($pwd_dir =~ /PMs/){ > $basedir = "$basedir/web"; > } > else { > $basedir = "$basedir/$pwd_dir"; > } > } > last; > } > elsif ($dir eq $path[-1]) { > last; > } > === message truncated === ___________________________________________________________ALL-NEW Yahoo! Messenger - all new features - even more fun! http://uk.messenger.yahoo.com _______________________________________________ Perl-Unix-Users mailing list [EMAIL PROTECTED] To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs