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

Dear monks i m trying to run another perl script in my perl script i am using system "myfile.pl" it only open the file but i want to execute my perl script please give some suggestions to run this script here is my scripts

#!/usr/bin/perl my $file= $ARGV[0]; #Open the file and read data #Die with grace if it fails open (FILE, "<$file") or die $!; @lines = <FILE>; close FILE; #Open same file for writing, reusing STDOUT open (STDOUT, ">$file") or die $!; #Walk through lines, putting into $_, and substitute 2nd away for ( @lines ) { s/&#/&amp;#/ig; print } system "crrep.pl",$file;

this script argument value passed to the crrep.pl program argument value for input file

CRREP.PL use warnings; use strict; use Data::Dumper; use XML::Twig; my @xhash=(); my $xhash=\@xhash; my $file= $ARGV[0]; $xhash = XML::Twig->new(); $xhash -> parsefile($file); $xhash -> print;

my main script wants to run crrep.pl but it only open help me to execute

Replies are listed 'Best First'.
Re: run another perl script in perl
by Corion (Patriarch) on Sep 03, 2010 at 14:02 UTC

    Use

    my $cmd = qq{$^X -w "ccrep.pl" $file}; system $cmd == 0 or die "Couldn't launch [$cmd]: $! / $^E";

    Your file associations are set up in a way that your shell will launch a text editor opening the file instead of perl running the file. Ask your system administrator how to change this situation if you really want this changed.

    Update: Fixed syntactically wrong quotes, spotted by Your Mother. Thanks!

Re: run another perl script in perl
by Marshall (Canon) on Sep 03, 2010 at 14:42 UTC
    system "perl", "-w", "crrep.pl", $file;

    update fixed wrong syntax...thanks ikegami
    system "perl -w crrep.pl",$file;

    Off topic from your original question but I hope a point that will be instructive: I believe that your updating algorithm is flawed. So what happens if your program were to crash before all @lines were finished?

    You can't fix the error and re-run the program because at this point the original data is gone! It is better to open new file handle to $out or OUT, and send output there. When all processing is complete, delete the input file, rename the OUT file to the original file's name. Try to set up scenarios where you can just "rerun the program again" if it didn't work and minimize windows where recovery is difficult or impossible. Note that there are many ways that a program can crash that aren't your program errors (like windows restart, power fail, etc).

      That instructs Perl to execute the file "perl -w crrep.pl". You want

      system "perl", "-w", "crrep.pl", $file; -or- system qq{perl -w crrep.pl "$file"};