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;
}
elsif ($dir =~ /PMs/ && $relative eq "y") {
$basedir = ".$basedir/web";
last;
}
else {
$basedir = "$basedir/$dir";
}
}
}
else {
foreach $dir (@path) {
if ($#path eq 0 ){
$basedir = "$pwd/";
last;
}
elsif ( $dir eq $path[-1] && $relative ne "y") {
last;
}
elsif ($dir eq $path[-1] && $relative eq "y") {
$basedir = ".$basedir";
last;
}
else {
$basedir = "$basedir/$dir";
}
}
}
if (!-e $basedir) {
system ("mkdir -p $basedir");
}
my $in_fig = $pdffile;
my @out_tmp = split /.fig/, $path[-1];
my $tmp_ps = "$out_tmp[0].ps";
my $out_pdf = "$out_tmp[0].pdf";
unlink '$basedir/$out_pdf';
system ("$fig2ps $in_fig -printfile $tmp_ps");
print "Writing to $basedir/$out_pdf ...\n";
system ("ps2pdf $tmp_ps $basedir/$out_pdf");
unlink $tmp_ps;
}
print "\n";
_______________________________________________
Perl-Unix-Users mailing list
[EMAIL PROTECTED]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs