в перле аналог сишного #include

Eugenia_2005

Какой субж, кто подскажет?
В справке роюсь, не нахожу.

VitMix

use или require

Eugenia_2005

Ну это же будет как импорт модуля, а не лексическая вставка текстового файла.
А именно текстовую подстановку файла можно сделать? Все-таки есть разница.
Хотя, конечно, мне под задачу это подходит, но все же.

tokuchu

include

Eugenia_2005

Напиши более распространно, пожалуйста.
Если просто так написать, то выдает, что это неизвестная процедура.

tokuchu

Ну вот такое вот:

include(СТРОКА);


где СТРОКА содержит имя файла.

Eugenia_2005

Ну именно такое вот и выдает, что процедура неизвестна!
Undefined subroutine &main::include called at файл line n.

rfgbnfy

сам перла толком не знаю , но вот какие высказывания на эту тему понаходил
Кстати говоря, в языке Perl вообще нет функции многократного включения, наподобие include (есть только типа include_once). Функция do не в счет, потому что она еще и исключения перехватывает, а значит, это концептуально не то же самое, что и require.
Вот тут посмотри. Может это оно..........

tokuchu

Блин... простите тормоза
Что-то я Perl с PHP перепутал.
Модераторы, удалите нафиг мои ответы здесь, плз.

VitMix

do EXPR Uses the value of EXPR as a filename and executes
the contents of the file as a Perl script. Its
primary use is to include subroutines from a Perl
subroutine library.
do 'stat.pl';
is just like
scalar eval `cat stat.pl`;

Eugenia_2005

1 Что такое "функция многократного включения" ? И что за include_once?
2 В твоей ссылке нашел вот что :
do 'stat.pl';
Это то же самое, что:
eval 'cat stat.pl';
К сожалению, не подходит - содержимое, конечно, как скрипт выполняется, но как отдельный процесс (точно не знаю, но такое ощущение). То есть тамошние переменные локальные - в основном скрипте они не видны (а это-то мне и надо - включение <>.inip, конфигурационного файла с объявлением переменных).
Так что похоже, не умеет перл

Ivan8209

1> man cpp
2> man m4
3> man sed; man bash
?

Eugenia_2005

Это ты о чем?
У меня нет никаких манов, WinXP
И что такое m4 и sed, не ведаю.

Ivan8209

Ну так, поставь.
В чём проблема-то?
У меня здесь тоже не Уних, но и sed, и m4 есть.
Правда, читаю я не маны, а инфо или документацию в ТеХ.

Eugenia_2005

Что поставить, и главное, зачем?

Ivan8209

Например, CygWin или MinGW.
Работать удобнее будет.

Eugenia_2005

В чем удобство будет? Проще говоря, нафиг надо?
Интепретатор перла не изменится - то есть менять его и не надо, делается-то для машины, где все виндовое.
Цигвин есть, стоял, теперь не стоит и надобности не чувствую.

Ivan8209

1. Будет приличная обработка текста, достаточно быстрая.
Можешь, конечно, переписать всё на перле, но смысл?
2. Будет приличная работа с множествами файлов.
Можешь и это переписать на перле, а смысл?
3. Будет rcs/cvs.
Можешь и это переписать на перле...

Eugenia_2005

1 Что ты подразумеваешь под "приличной обработкой текста"?
2 Что такое "приличная работа" с ... ?
3 И наконец, что такое rcs/cvs? Правда не знаю

Ivan8209

Будут diff, patch, cat... awk (заменяет половину ёкселя sed(тоже помогает grep, xargs, find.
Это, конечно, не только textutils.
RCS -- Revision Control System. Даёт возможность нормально работать с версиями (откаты к предыдущим, нумерация, хранение, автоматическая вставка номера в программу и пр.)
CVS -- Concurrent Versioning System. Можно работать в несколько рук с поддержкой версий (основана на RCS) для кучи файлов.
CVS мне пока не требовалась, а RCS пользуюсь.
Вообще, GNU в своём "Not UNIX" даёт очень удобное средство разработки.
---
...Я работаю...

artimon

Будут diff, patch, cat... awk (заменяет половину ёкселя sed(тоже помогает grep, xargs, find.
Это, конечно, не только textutils.

Все уже есть скомпилированные под винду без cygwin'а.
Я думаю, что и RCS тоже есть.

sany79

Из man-страницы perlrun:


-P NOTE: Use of -P is strongly discouraged because of its inherent
problems, including poor portability.
This option causes your program to be run through the C preproces-
sor before compilation by Perl. Because both comments and cpp
directives begin with the # character, you should avoid starting
comments with any words recognized by the C preprocessor such as
"if", "else", or "define".

Ivan8209

А что, cpp до сих пор распознаёт "#<куча пробелов>include" как директиву?
Надо проверить, а то вдруг ещё живо...
Я бы на месте спрашивающего, воспользовался бы текстовым препроцессором под названием "gema".
Во-первых, потому что удобно. Вряд ли придётся включать файлы на лету.
А если и придётся это моэно сделать средствами shell, даже при условии, что shell=command.com

sany79

Конечно, распознаёт.
Мне очень интересно, зачем понадобился именно #include и чем не подходит use/require/do.

Ivan8209

Если "do" --- это полностью изолированное исполнение sh, то понятно, почему он не понравился.
Если "use", "require" --- это подключение модулей, то непонятно, почему они не понравились.
Потому что "#include" --- подпорка, хоть как-то дающая возможность выжить кривому полустековому языку Си.
Вообще-то, действительно, незачем куски файлов включать.
---
...Ибо нефиг...
Оставить комментарий
Имя или ник:
Комментарий: