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

Reply via email to