2012-04-11 2 views
3

У меня есть основная программа mytool.pl, которая будет запущена из командной строки. Существует несколько вспомогательных скриптов special1.pl, special2.pl и т. Д., Каждый из которых содержит пару подпрограмм и хэш, все одинаково названные по сценариям. Предположим, что они называются MySpecialFunction(), AnotherSpecialFunction() и% SpecialData.Наличие сценария perl использует один из нескольких вторичных скриптов

Я хочу, чтобы mytool включил/использовал/импортировал содержимое одного из специальных * .pl файлов, только один, в соответствии с параметром командной строки. Например, пользователь будет делать:

bash> perl mytool.pl --specialcase=5 

и MyTools будет использовать MySpecialFunction() из special5.pl, и игнорировать все другие специальные * .pl файлы.

Возможно ли это и как это сделать?

Важно отметить, что выбор того, какой специальный файл использовать во время выполнения, поэтому добавление «использования» в верхней части mytool.pl, вероятно, неверно.

Примечание. Я программист на длительный период времени C, а не эксперт perl; Возможно, я прошу что-то очевидное. Это для одноразового проекта, который превратится в пыль всего за месяц. Ни mytool.pl, ни специальный? .pl (или perl) не будут интересны после завершения этого короткого проекта. Поэтому мы не заботимся о решениях, которые разрабатываются или требуют изучения некоторой глубокой магии. Быстро и грязно. Я предполагаю, что модуль модуля Perl для этого слишком переполнен, но понятия не имеет, какие альтернативы есть.

ответ

1

Когда вы use модуль, Perl просто require «s модуль в BEGIN блок (и импортирует модули, экспортируемые элементы). Поскольку вы хотите изменить сценарий, который вы загружаете во время выполнения, вызовите require самостоятельно.

if ($special_case_1) { 
    require 'special1.pl'; 
    # and go about your business 
} 

Вот good reference когда использовать use vs. require.

+0

Ключевая идея - использовать ключевое слово 'require'. Найденный cheatsheet на 'use' 'require' 'do' и 'import' (три из которых новы для меня) по адресу http://www.snowfrog.net/2009/05/09/perl-use-require-import -and-do /, который отвечает на несколько нечетких вопросов, которые у меня были в голове. – DarenW

+0

@DarenW Взгляните на документацию Perl, встроенную в Perl. Вы используете программу perldoc для чтения документации. Все это на [web] (http://perldoc.perl.org) тоже. Взгляните на раздел учебника. –

2

Вы можете использовать хэш или массив для отображения значений specialcase к .pl файлов и require или do их по мере необходимости.

#!/usr/bin/env perl 

use strict; use warnings; 

my @handlers = qw(one.pl two.pl); 

my ($case) = @ARGV; 
$case = 0 unless defined $case; 

# check that $case is within range 

do $handlers[$case]; 

print special_function(), "\n"; 
+0

Объединение их в один файл будет контрпродуктивным для нас. «Специальные» файлы содержат много необычного жесткого мусора, на который мы не хотели бы смотреть. – DarenW

+0

В этом случае 'do' соответствующий файл во время выполнения. Ссылка на документацию приведена в первом абзаце моего ответа. –

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

  • Нет связанных вопросов^_^