Windowsに関する限り、C:/Perl/lib
同じC:\Perl\lib
ディレクトリです。
perlportのドキュメントノート (強調を追加)
DOS と派生物
Perl は長い間、PC-DOS、MS-DOS、OS/2 などのシステムで動作する Intel スタイルのマイクロコンピュータ、および言及できるほとんどの 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 ヴィンテージの多くのコマンドライン ユーティリティは/
オプション プレフィックスとして扱われるため、/ を含むファイル名と混同される可能性があります。外部プログラムを呼び出す/
ことは別として、一般的な使用法とより一貫性があり、何をバックワックし、何をバックワックしないかを覚える問題を回避するため、問題なく動作し、おそらくより良く動作します。
あなたのコメントは、あなたがmygengo-perl-newを使用していることを示していますが、それは にインストールされていC:\Perl\lib\MyGengo\mygengo-api\nheinric-mygengo-perl-new-ce194df\mygengo
ます。これは、モジュールをインストールする通常とは異なる場所です。モジュールの記述方法では、 でmygengo.pm
指定されたディレクトリの 1 つにあると想定され@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';
このようにする場合は、追加することを忘れないでください。
完全な詳細については、 perlfunc ドキュメントの@INC
検索プロセスrequire
と、 を介したモジュールの追加のセマンティクスをuse
参照してください。
スラッシュとバックスラッシュに関する一般的なアドバイス
コードが Windows でのみ実行される場合でも、ハードコードされたパスの区切り文字としてスラッシュを使用することをお勧めします。バックスラッシュは Perl 言語のエスケープ文字なので、もっと慎重に考える必要があります。二重引用符で囲まれた文字列では、通常の意味を得るためにエスケープ文字をエスケープすることを忘れないでください。
# 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\';
これで、構文エラーが発生しました。
先頭行 n の EOF より前のどこにも文字列ターミネータ "'" が見つかりません。
別の値を に補間したい場合があります$dir
。
$dir = 'C:\Perl\lib\$module'; # nope
そうそう、補間には二重引用符が必要です。
$dir = "C:\Perl\lib\$module"; # still not right
ヘッドスクラッチとデバッグ後
$dir = "C:\\Perl\\lib\\$module"; # finally
したがって、バックスラッシュは間違いが発生しやすく、メンテナンスを刺激します。スラッシュは、単一引用符と二重引用符で囲まれた文字列内の通常の文字であるため、ほとんどの場合、期待どおりの意味を持ちます。
perlportが指摘しているように、Windows コマンド シェルはスラッシュをオプションの導入として扱い、バックスラッシュをパス セパレータとして扱います。シェルを避けられない場合は、バックスラッシュの処理を余儀なくされることがあります。