http://www.perlmonks.org?node_id=539657


in reply to Re: execute perl script frm shell script
in thread execute perl script frm shell script

here the concern is not to execute the perl script. i had done same what you had sugegsted me. but problem is different platforms have different perl verions. so i check for platfom and depending on that i call the script like
for linux / solaris
exec /pkg/perl/5.8/bin/perl $SOURCE_ROOT/scripts/script1.pl "$@"
for cygwin
exec perl $SOURCE_ROOT/scripts/script1.pl "$@" and in script1.pl, i will again check if perl version 5.8 or 5.6.1 is available or not.if not i will exit. the main thing to do is to use same version of perl for any user independent of what they have in their machines. in cygwin we have to call ant perl script bu writing
perl ......
for avoiding this i had written shell script. if there is any way to do it in prl what i m doing in shell , perl is always better.
  • Comment on Re^2: execute perl script frm shell script

Replies are listed 'Best First'.
Re: execute perl script frm shell script
by jonadab (Parson) on Mar 28, 2006 at 12:33 UTC
    problem is different platforms have different perl verions

    This is not a problem that a shell script can solve.

    What you really have to do is write your Perl script so that it will run under all the perl versions you have to deal with. This, as a general rule, is not hard, if you restrict yourself to using language features that are explained in the 2nd edition of the camel book (assuming all of the perl versions are 5.something; if you have to support version 4, then it gets a bit harder.)

    There are a handful of exceptions, very special things that are hard to do with non-recent versions of Perl, but they're obscure and mostly have to do with Unicode, and you're not likely to run into them in an environment where it's taboo to upgrade perl.

    If you're having trouble getting certain parts of the Perl script to work under certain versions of perl, try posting a question to Perlmonks about that: you'll get much better answers for Perl questions around here than you will for shell script questions. Most of us don't write shell scripts any more, because we write Perl scripts instead.


    Sanity? Oh, yeah, I've got all kinds of sanity. In fact, I've developed whole new kinds of sanity. Why, I've got so much sanity it's driving me crazy.
Re^3: execute perl script frm shell script
by graff (Chancellor) on Mar 28, 2006 at 10:40 UTC
    I'm not sure I understand your reply. Anything you do in a shell script can be done in a perl script (except for setting environment variables in the shell that invokes the perl script -- you can only do that if you "source" a shell script).

    If both windows and unix/linux systems are reading "Script1.pl" from the same disk/directory on your local network (assuming this script is already written to be OS-independent), and all you need to worry about is whether the version of perl running your script is recent enough, you can include a statement like this in the script:

    require 5.006001; # die if we're running under an older perl version
    On the other hand, if there really are different versions of the script targeted for different systems (or different versions of perl), you can always find a way to integrate these variations into a single script that runs properly in each environment, by checking the OS type and perl version, using perl's internal global variables (cf. perlvar), refactoring the code in a sensible way to simplify the branching for the different environments.

    Anyway, I really can't figure out what you meant by this:

    the main thing to do is to use same version of perl for any user independent of what they have in their machines

    What people "have in their machines" (in terms of what version of perl is installed) is going to determine what happens when they run your script, regardless of how you write it or wrap it. If their version of perl is too old, either the script will die because you put a "require" statement for a minimum perl version number, or else (if you don't have that statement) it will die or do something bad because the older perl doesn't know what to do with your script.