Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling

Re: execute perl script frm shell script

by graff (Chancellor)
on Mar 28, 2006 at 08:47 UTC ( #539654=note: print w/replies, xml ) Need Help??

in reply to execute perl script frm shell script

It looks like both "" and "" take the same command line args, so how about a "" (not numbered), instead of a shell script, in order to pick the right one:
#!/usr/bin/perl my $script = ( $^O =~ /linux|solaris/ ) ? "" : ""; exec $script, @ARGV;
That assumes that you've done "chmod +x" on and, and they are in your shell's PATH (e.g., if they are in your current working directory, then your PATH should include ".").

It might be even better if the differences between Script1 and Script2 could be merged into a single perl script, with appropriate logic to do things differently depending on the value of $^O. Then you don't need a separate "wrapper" script at all.

Replies are listed 'Best First'.
Re^2: execute perl script frm shell script
by Anonymous Monk on Mar 28, 2006 at 09:25 UTC
    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/ "$@"
    for cygwin
    exec perl $SOURCE_ROOT/scripts/ "$@" and in, 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.
      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.
      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 "" 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.

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://539654]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (6)
As of 2022-09-25 13:45 GMT
Find Nodes?
    Voting Booth?
    I prefer my indexes to start at:

    Results (116 votes). Check out past polls.