Модификация массива @INC для Perl кажется для отдельной области очень запутанной. Я хотел бы получить некоторое разъяснение, поскольку он, кажется, сражается с любыми средствами динамической инициализации объектов.perl: изменить @INC только для текущей области
Можно было бы подумать, что я мог бы определить его как локальный, чтобы решить эту проблему.
В соответствии с руководством, «local изменяет перечисленные переменные локально на прилагаемый блок, файл или eval».
Часть, которая раздражает меня, является частью «или».
Проблема: Я хотел бы изменить массив @INC, чтобы включить один и ТОЛЬКО один каталог при определенных обстоятельствах и ТОЛЬКО для текущего файла.
Пример попытки и вопросы:
Допустим, у меня есть index.pl запуск сценария:
#!/usr/bin/perl
use strict;
use warnings FATAL => 'all';
use File::Basename;
# Lets say I want to modify @INC here to look in ONLY one path. Local
# should allow us to declare for one scope or file (how non explicit this
# is annoys me) Since I have not defined a scope with brackets, it should
# be effective for the current file
local @INC = (dirname(__FILE__) . '/foo/'); #some relative path
# Lets say bar now uses standard perl modules
require 'bar.pm';
# ^- This will fail because local did not work as described, fails at use
# XML::Simple because it is traversing foo
my $bar = bar->new();
Ради того, чтобы быть всеобъемлющей, вот bar.pm:
package bar;
use strict;
use warnings;
sub new
{
my $class = shift;
my $self = bless {}, $class;
use XML::Simple;
return $self;
}
1;
Есть ли способ изменить @INC ТОЛЬКО для текущего файла, оставив его неповрежденным во всех проанализированных файлах позже?
(я знаю, что могу unshift, но в конце концов, там может быть десятки каталогов это может быть пересекающие)
Я собирался downvote это, как не решает актуальную проблему изменения @INC, но это действительно работает на ~ 90% того, что им пытаются сделать , – steve
Вы попросили изменить '@ INC' в середине' require'. Это довольно сложно сделать без изменения 'require'. Неважно, заметьте. Замена '@ INC' магической переменной будет работать. – ikegami