perl. совсем простой вопрос про require.
Делай модуль!
чёта типа use lib '.'
Текущая дирректория и так входит в список путей, где ищется. Надо модуль создавать и не париться.
#!/usr/bin/perl
use strict;
my $code = qq{sub a { print '!'; }};
eval $code;
&a;
но это изврат. если какая-то функция нужна в двух местах, то логичнее написать package. use с простым файлом не проканает и require тоже.
#!/usr/bin/perl
use strict;
my $code = qq{sub a { print '!'; }};
eval $code;
&a;
к чему это ?
![:confused:](/images/graemlins/confused.gif)
Текущая дирректория и так входит в список путей, где ищетсяУверен?
![;)](/images/graemlins/wink.gif)
Поэтому может помочь:
use FindBin qw($Bin);
use lib "$Bin";
require "third.pl";
use с простым файлом не проканает и require тоже.хм. оказывается, можно require использовать.
но это плохо с точки зрения разделения пространств имен. очень плохо.
в смысле, настолько, что за это надо карать
я ведь простую функцию выделил в файл без претензий на очень далёкое использование.
![;)](/images/graemlins/wink.gif)
почти все скрипты, которые используются дольше дня, требуют последующего вмешательства. а если скрипты такие, что не помещаются в один файл, лучше позаботиться о себе с самого начала --- это может избавить от неприятных неожиданностей в будущем, когда эту функцию захочется использовать еще где-нибудь.
загрузить файл с расширением .pl через require нельзяя только что попробовал --- можно, но при этом если в главном файле есть функция с таким же именем, то она будет игнорироваться в пользу функции из подключенного файла.
не надо пользоваться всякой хуйнёй "еще где нибудь"
![;)](/images/graemlins/wink.gif)
конечно, не является. это, предже всего, средство от необходимости внесения однотипных изменений при модификации кода. просто, если скрипт не из разряда "написали десять строк, сделали работу и забыли", то дальнейшие изменения и рост кода весьма вероятны.
do работает, но если запускать не из той же дириктории -тогда пишет, что функцию не знает
из двух зол: поместить одинаковый код копипастов в два файла и создать свой модуль для функции из 10 строк, я выбрал первое.
правила очень простые: как только возникает необходимость скопипастить что-то длиннее строчки, параметризуй и создай функцию, как только захотелось использовать одну функцию в двух местах, позаботься об окружении и вынеси в модуль. это действительно единственно верный путь.
Оставить комментарий
Phoenix
можно заинклудить файл, находящий в той же директории?т.е. есть 2 скрипта. в них есть одинаковый кусок. я его выделил в функцию и засунул в третий файл.
теперь
require "third.pl"
ругается, если запускать по абсолютному пути