NodeReaper has asked for the wisdom of the Perl Monks concerning the following question:

This node was taken out by the NodeReaper on Thu May 26 06:53:08 2005 (EST)

Replies are listed 'Best First'.
sounds like the shell script is buggy
by jonadab (Parson) on May 26, 2005 at 10:33 UTC
    When I call $count=`xyz abcd` in a perl program, it should return "1". But it returns "2".

    Why should it return "1"? How do you know that's what the shell script is printing? How do you know the shell script isn't printing "2"? For instance, how do you know the shell script isn't counting itself as a running instance of the program, since it has the program's name on its command line?

    If I were dealing with this issue, I'd forget about the shell script and just solve the problem in Perl directly...

    open PS, "ps -A |"; # Note: not all versions of ps use the same args; # -A works on Linux systems, but you may need # -x on some systems, e.g., Darwin. my @instance = grep { /abcd/ } <PS>; print "Running Instances:\n"; print join "\n", map { "\t$_" } @instances; print "\n";

    "In adjectives, with the addition of inflectional endings, a changeable long vowel (Qamets or Tsere) in an open, propretonic syllable will reduce to Vocal Shewa. This type of change occurs when the open, pretonic syllable of the masculine singular adjective becomes propretonic with the addition of inflectional endings."  — Pratico & Van Pelt, BBHG, p68
      Shell script is working fine when I use it in command prompt. Only when I used it in Perl, it gives additional count.
      
      Here is the shell command that I used inside the program,
      
      ps -f -u $userid | tr -s " " | cut -f9-20 -d" " | grep -v "grep" | grep -v "vi " | grep -v "view" | grep -c $1
      
      It shows the following processes(Only in Perl),
      sh /test/xyz abcd
      /usr/bin/perl ./abcd.pl
      
      
        indeed.. 1 for the 'xyz abcd' call, and 1 for Perl running abcd.pl. So no surprise, when you don't run Perl, you don't get 1 for Perl..

        You could grep -v the xyz(or rather $0) call out, if you like.. but please realize that this is not a good way of dealing with the problem... what are you going to do, if you start using emacs next month? - you'll have to rewrite all your shell scripts?..

        It seems your Perl script needs to know how many instances of itself are running. This is different than knowing about any random process, if only because you have control over it.. Perhaps it can read and increment a number, saved in a file in some global location.. or just touch a new file somewhere.. or you could have a global watcher script, that registers new instances ( although that sounds a little far fetched )..

        I'm just sure that there are many solutions that don't involve convoluted shell calls..