perl. совсем простой вопрос про require.
Делай модуль!
чёта типа use lib '.'
Текущая дирректория и так входит в список путей, где ищется. Надо модуль создавать и не париться.
ну, как бы, такое, конечно, работает
но это изврат. если какая-то функция нужна в двух местах, то логичнее написать package. use с простым файлом не проканает и require тоже.
#!/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;
к чему это ?

Текущая дирректория и так входит в список путей, где ищетсяУверен?
Просто у автора треда, похоже, "текущая директория" - это не папка, где находятся скрипты, а папка, из которой он их запускает (что вполне логично) 

Возможно, дело в том, что скрипт запускается не из текущей директории
Поэтому может помочь:
Поэтому может помочь:
use FindBin qw($Bin);
use lib "$Bin";
require "third.pl";
use с простым файлом не проканает и require тоже.хм. оказывается, можно require использовать.
но это плохо с точки зрения разделения пространств имен. очень плохо.
в смысле, настолько, что за это надо карать
это только в перле такое поведение?
я ведь простую функцию выделил в файл без претензий на очень далёкое использование.
я ведь простую функцию выделил в файл без претензий на очень далёкое использование.
require принимает параметром не имя _файла_, а имя модуля. То есть require X :: Y :: Z превращается в загрузку файла X/Y/Z.pm, загрузить файл с расширением .pl через require нельзя, зато можно через do. принципиальное отличие do от require состоит в том, что require одного и того же модуля не будет производиться дважды. напоминаю
что use это тот же require только завернутый в BEGIN и с вызовом import.
что use это тот же require только завернутый в BEGIN и с вызовом import.почти все скрипты, которые используются дольше дня, требуют последующего вмешательства. а если скрипты такие, что не помещаются в один файл, лучше позаботиться о себе с самого начала --- это может избавить от неприятных неожиданностей в будущем, когда эту функцию захочется использовать еще где-нибудь.
загрузить файл с расширением .pl через require нельзяя только что попробовал --- можно, но при этом если в главном файле есть функция с таким же именем, то она будет игнорироваться в пользу функции из подключенного файла.
> когда эту функцию захочется использовать еще где-нибудь
не надо пользоваться всякой хуйнёй "еще где нибудь"
code reuse не является самоцелью. вообще не надо считать, что любой экран кода становится "библиотекой" просто от того что его вынесли в отдельный файл.
не надо пользоваться всякой хуйнёй "еще где нибудь"
code reuse не является самоцелью. вообще не надо считать, что любой экран кода становится "библиотекой" просто от того что его вынесли в отдельный файл.> code reuse не является самоцелью
конечно, не является. это, предже всего, средство от необходимости внесения однотипных изменений при модификации кода. просто, если скрипт не из разряда "написали десять строк, сделали работу и забыли", то дальнейшие изменения и рост кода весьма вероятны.
конечно, не является. это, предже всего, средство от необходимости внесения однотипных изменений при модификации кода. просто, если скрипт не из разряда "написали десять строк, сделали работу и забыли", то дальнейшие изменения и рост кода весьма вероятны.
ура!
do работает, но если запускать не из той же дириктории -тогда пишет, что функцию не знает
do работает, но если запускать не из той же дириктории -тогда пишет, что функцию не знает
понимаешь в чём дело,
из двух зол: поместить одинаковый код копипастов в два файла и создать свой модуль для функции из 10 строк, я выбрал первое.
из двух зол: поместить одинаковый код копипастов в два файла и создать свой модуль для функции из 10 строк, я выбрал первое.
ну и неправильно. второй вариант --- это не зло, а единственно верный путь, а первый --- источник большого геморра.
правила очень простые: как только возникает необходимость скопипастить что-то длиннее строчки, параметризуй и создай функцию, как только захотелось использовать одну функцию в двух местах, позаботься об окружении и вынеси в модуль. это действительно единственно верный путь.
правила очень простые: как только возникает необходимость скопипастить что-то длиннее строчки, параметризуй и создай функцию, как только захотелось использовать одну функцию в двух местах, позаботься об окружении и вынеси в модуль. это действительно единственно верный путь.
Вообще, рекомендуют ради двух копипастов не заморачиваться.
http://en.wikipedia.org/wiki/Rule_of_three_%28programming%29
http://en.wikipedia.org/wiki/Rule_of_three_%28programming%29
Оставить комментарий
Phoenix
можно заинклудить файл, находящий в той же директории?т.е. есть 2 скрипта. в них есть одинаковый кусок. я его выделил в функцию и засунул в третий файл.
теперь
require "third.pl"
ругается, если запускать по абсолютному пути