Что касается Windows, C:/Perl/lib
и C:\Perl\lib
- это один и тот же каталог.
Примечания к документации по perlport (выделено мной)
DOS и производные
Perl уже давно портирован на микрокомпьютеры в стиле Intel, работающие под такими системами, как PC-DOS, MS-DOS, OS / 2 и большинство платформ Windows, о которых вы можете упомянуть (кроме Windows CE, если вы считаете это). Пользователи, знакомые с оболочками стиля COMMAND.COM
или CMD.EXE
, должны знать, что каждая из этих спецификаций файла может иметь небольшие различия:
my $filespec0 = "c:/foo/bar/file.txt";
my $filespec1 = "c:\\foo\\bar\\file.txt";
my $filespec2 = 'c:\foo\bar\file.txt';
my $filespec3 = 'c:\\foo\\bar\\file.txt';
Системные вызовы принимают либо /
, либо \
в качестве разделителя пути. Однако многие утилиты командной строки DOS vintage рассматривают /
как префикс параметра, поэтому имена файлов, содержащие /, могут запутаться. Помимо вызова каких-либо внешних программ, /
будет работать нормально и, вероятно, лучше, поскольку он более соответствует популярному использованию и позволяет избежать проблемы с запоминанием того, что нужно отбивать, а что нет.
Ваш комментарий показывает, что вы используете mygengo-perl-new, но установили его в C:\Perl\lib\MyGengo\mygengo-api\nheinric-mygengo-perl-new-ce194df\mygengo
. Это необычное место для установки модуля. В соответствии с тем, как модуль написан, он ожидает, что mygengo.pm
будет находиться в одном из каталогов, указанных в @INC
. Затем клиентский код втягивает его с помощью
use mygengo;
Я предлагаю переместить mygengo.pm
с C:\Perl\lib\MyGengo\mygengo-api\nheinric-mygengo-perl-new-ce194df\mygengo
на C:\Perl\site\lib
.
В качестве альтернативы, если вы используете mygengo как часть другого разрабатываемого вами пакета, вы можете добавить mygengo
в свое дерево исходных текстов, возможно, как git submodule. Не забудьте добавить use lib 'mygengo';
, если сделаете это таким образом.
Для получения полной информации прочтите о @INC
процессе поиска в документации perlfunc на require
и < href = "http://perldoc.perl.org/functions/use.html" rel = "nofollow"> дополнительная семантика для модулей через use
.
Общие советы по использованию косой черты и обратной косой черты
Даже если ваш код будет работать только в Windows, лучше использовать косую черту в качестве разделителя в жестко заданных путях. Обратная косая черта - это escape-символ в языке Perl, поэтому вам следует подумать об этом более тщательно. В строках с двойными кавычками вы должны не забывать экранировать escape-символ, чтобы получить его обычное значение, например,
# my $dir = "C:\Perl\lib"; # oops, $path would be 'C:Perlib'
$dir = "C:\\Perl\\lib";
Ситуация может быть немного лучше внутри строк в одинарных кавычках. Установка $dir
как в
$dir = 'C:\Perl\lib';
делает то, что вы ожидаете, но скажите, что вы хотите, чтобы $dir
имел завершающую косую черту.
$dir = 'C:\Perl\lib\';
Теперь у вас синтаксическая ошибка.
Can't find string terminator "'" anywhere before EOF at dirstuff line n.
Вы можете интерполировать другое значение в $dir
.
$dir = 'C:\Perl\lib\$module'; # nope
Ах да, для интерполяции нужны двойные кавычки.
$dir = "C:\Perl\lib\$module"; # still not right
После головокружения и отладки
$dir = "C:\\Perl\\lib\\$module"; # finally
Следовательно, обратная косая черта более подвержена ошибкам и вызывает раздражение при обслуживании. Прямая косая черта - это обычный символ внутри строк как в одинарных, так и в двойных кавычках, поэтому он почти всегда означает то, что вы ожидаете.
Как отмечается в perlport, командная оболочка Windows обрабатывает косую черту как вводные параметры и обратная косая черта в качестве разделителей пути. Если вы не можете избежать оболочки, возможно, вам придется иметь дело с обратной косой чертой.
person
Greg Bacon
schedule
26.05.2012
@INC
. - person TLP   schedule 26.05.2012C:\Perl\lib\MyGengo\mygengo-api\nheinric-mygengo-perl-new-ce194df\mygengo
- person cppcoder   schedule 26.05.2012use MyGengo
perl будет искатьc:/perl/lib/MyGengo.pm
. Каталоги обозначаются двойным двоеточием, так чтоuse MyGengo::Foo
будет находиться вc:/perl/lib/MyGengo/Foo.pm
. - person TLP   schedule 26.05.2012