2015-08-12 5 views
1

Мое намерение вызвать скрипт Child.pl из сценария Parent.pl

я использовал систему() функцию для вызова другого скрипт.
При использовании

system("perl Child.pl $argument"); 

аргумент передается.

Но при использовании

system("Child.pl $argument"); 

аргумент не передается.

Это из-за какой-либо ошибки в коде.
Я новичок в perl-скриптах. Простите меня, если я прошу прощения.

Я использую окна 7 и мой PERL версии v5.8.4

Мой Parent.pl сценарий

use warnings; 

print "Inside Parent Script\n\n"; 
$var = 10; 
print "Calling system without perl prefix\n"; 
system("Child.pl $var"); 
print "\nCalling system with perl prefix\n"; 
system("perl Child.pl $var"); 
print "\nEnd of Parent Script\n"; 

exit 0; 

Мой Child.pl скрипт

use warnings; 

print "\tInside Child Script\n"; 
print "\tArgument = $ARGV[0] \n"; 
print "\tEnd of Child Secipt\n"; 

exit 0; 

Мой Выход

Inside Parent Script 

Calling system without perl prefix 
    Inside Child Script 
Use of uninitialized value in concatenation (.) or string at C:\Child.pl line 4. 
    Argument = 
    End of Child Script 

Calling system with perl prefix 
    Inside Child Script 
    Argument = 10 
    End of Child Script 

End of Parent Script 

Это se ems, как на каком-то ПК, работает без префикса perl.
Я имею дело с огромным нежелательным скриптом, который не использует perl-префикс.
Есть ли способ сохранить эти сценарии без изменений и до сих пор пропустить этот аргумент.

+0

Пожалуйста, сообщите нам, в какой системе вы работаете? – Borodin

+0

Я работаю над Windows 7 Enterprise Edition, и моя версия perl v5.8.4 –

+0

Хорошо, вам, вероятно, следует переустановить Perl (ActivePerl или Strawberry?), Так как ассоциация файлов isn'tr настроена правильно – Borodin

ответ

0

Первое:

Добавить притон линию в обоих сценариях.

Второе:

Дайте полный путь вашего ребенка сценария.

Третье:

Убедитесь, что оба скрипты выполнимы.

Parent.pl:

#!/usr/bin/perl 

use warnings; 

print "Inside Parent Script\n\n"; 
$var = 10; 
print "Calling system without perl prefix\n"; 
system("./Child.pl $var"); 
print "\nCalling system with perl prefix\n"; 
system("perl Child.pl $var"); 
print "\nEnd of Parent Script\n"; 

exit 0; 

Child.pl:

#!/usr/bin/perl 

use warnings; 

print "\tInside Child Script\n"; 
print "\tArgument = $ARGV[0] \n"; 
print "\tEnd of Child Secipt\n"; 

exit 0; 

Выход:

Inside Parent Script 

Calling system without perl prefix 
    Inside Child Script 
    Argument = 10 
    End of Child Secipt 

Calling system with perl prefix 
    Inside Child Script 
    Argument = 10 
    End of Child Secipt 

End of Parent Script 

Это должно работать нормально для вас тоже.

+0

Но в некоторых системах ее работа без любые изменения. Я имею дело с огромным списком скриптов, и если мне нужно отредактировать, мне придется отредактировать около 300 скриптов.Есть ли системная зависимость или что-то в этом роде. –

+0

Если вы используете Windows, тогда строка shebang shoud будет выглядеть примерно так: #! C: \ home \ apps \ perl \ bin \ perl.exe -w. Если вы можете опубликовать что-то конкретное там, где оно не работает, это было бы полезно. –

+0

Использование неинициализированного значения в конкатенации (.) Или строки в строке C: \ Child.pl 4. при доступе к аргументу в дочернем скрипте. Без shebang скрипты работают на некоторых машинах. Так будут ли какие-либо системные настройки, которые заставят его работать без редактирования скриптов. –

Смежные вопросы