Re: Perl question: passing in variables

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Vaughn Treude
Date:  
To: lynn.newton, Main PLUG discussion list
Subject: Re: Perl question: passing in variables
Lynn David Newton wrote:
> v> I'm trying to run a perl script that is executable; that is, the file
> v> has "x" permission and starts with this line:
>
> v> #!/usr/bin/perl -w
>
> v> There's a parameter in this script that's not
> v> defined by default, for example
>
> v> my $foo; # no default
>
> v> If foo is not set, the script exits with an error. Normally I would
>
> What JD says about the @ARGV array is true, however
> unless there is a mechanism within the perl script
> itself to handle external inputs, assign it to $foo,
> then there's nothing you can do to change it without
> editing the script.
>
> v> just modify the script but this script gets
> v> extracted from a shell script that has the perl
> v> script and an rpm embedded in it. (How they did
> v> that I don't know.) So I would expect there's a
> v> way to do this, but there were no help files with
> v> the script.
>
> v> The shell script invokes the install file like this:
> v> ./install_script *$
>
> I assume you mean $* not *$
>
> The way I'm guessing this works is that it uses a here
> document to drop the perl text to a temporary file and
> make it executable. $* would be interpreted by the
> shell as all the arguments you pass to it. For instance
> if you put
>
> echo $*
>
> inside a shell script and execute it with arguments
> you'll get something like this.
>
> $ myscript my dog has fleas
> my dog has fleas
>
> Therefore the shell script invoking the perl script
> would in turn execute
>
> ./install_script my dog has fleas
>
> or whatever the same arguments are that you invoke the
> shell script with.
>
> Look inside the perl script to see if there anything
> like
>
>    $foo = shift if ! $foo;

>
> or a line like one of these:
>
> use Getopt::Std;
> use Getopt::Long;
> getopts("$someoptionstring") or die("$some_errmsg");
> my $rv = GetOptions("$someoptionsstring");
>
> If so, then the script knows how to handle input
> options, which is likely (depending on where you got
> this and that it works for other people.)
>
> I'll assume that it *does* work for others, and that
> therefore it does *not* simply exit if $foo is unset
> with no way to set it.
>
> my $foo;
> ... other code that does not deal with $foo ...
> die( "blech\n" )if ! $foo;
>
> simply must exit.
>
> v> So I know that I can pass one or more arguments to the outer shell
> v> script and they will get passed verbatim to the perl script.
>
> v> Is there a to pass a value for foo into the script
> v> without modifying the script?
>
> If I understand what you're saying the answer is no.
> But I have a feeling some information is missing here.
>


Lynn,
You were right.  There was a GetOptions call in there!  I looked up the 
manual for this online.  (I am no perl guru, that's for sure.)  I 
realized that I was able to pass the value in the format:
    --foo=1234
Hooray!


Vaughn

---------------------------------------------------
PLUG-discuss mailing list -
To subscribe, unsubscribe, or to change your mail settings:
http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss