
モジュールへのパスを設定するのに以下のようにすると
use lib qw($cmd_path);
Can't locate BL/FileIO.pm in @INC (@INC contains: $cmd_path /usr/lib/perl
のようにエラーになり、$cmd_path が展開されません。
use lib qw("$cmd_path");
use lib q"$cmd_path";
など色々試したのですが、ダメでした。
設定する方法はあるのでしょうか?
$cmd_path はベタ書きしかないのでしょうか?
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
蛇足ですが、
qq()は中の文字列をダブルクォートで括った場合と同じ意味、
qw()は中の文字列を半角スペースでsplitしたのと同じ効果(つまり配列が返る)です。
その用法は全く違います。
他にもqで始まる関数はいろいろあるので、この機会に勉強してみてください。
ちなみにuse libは配列の引数を必要とします。
参考URL:http://www.rfs.jp/sb/perl/05/01.html
bgbgさん、参考になるページまで教えていただきありがとうございます。
もう少し勉強してみたいと思います。
このたびは、色々と教えていただきありがとうございました。
No.3
- 回答日時:
そのようになる原因は、No.2さんの仰ったとおり
・$cmd_path に「コンパイル時に」値が設定されていない
ということです。
useは他のプログラムよりも先駆けて実行されます。
つまり、$cmd_nameに値を入れるプログラム部分よりも先に実行されるので、use libする時の$cmd_nameの中身は空です。
これを解決するには、$cmd_nameに値を入れる処理部分を
BEGIN{
:
:
}
で囲みましょう。
BEGINで囲んだ処理がuseよりも上にあれば、useの実行前にBEGINの処理が行われます。
この回答への補足
すみません。
やはりTacosanのおっしゃるとおり、use lib qw( $cmd_path );でないとだめなようです。
BEGIN{ の中でunshift(@INC, $cmd_path);を設定していた為です。。
bgbgさん、Tacosanさん、全て解決しましたので、深くお礼申し上げます。<(_ _)>
bgbgさん、Tacosanさん本当にありがとうございます。
解決しました。
おっしゃるとおりBEGINで囲みましたら問題なく動きました。
本当にありがとうございました。
追加で質問なのですが、
use lib qq( $cmd_path );
use lib qw( $cmd_path );
どちらでもエラーにはならないのですが、どちらを使用しても問題ないでしょうか?
何度も質問して申し訳ありませんがよろしくお願いいたします。
No.2
- 回答日時:
手元 (AcrivePerl 5.8.7) では qq を使えば展開できているので, そこは問題ないはずです.
問題が発生する, なるべく小さなプログラム (とそのプログラムを実行したときに表示される全てのメッセージ) を出してもらえると解決の手掛かりになるんですが....
まあ, 思い付くのは
・実は BL/FileIO.pm が存在しない
・$cmd_path に「コンパイル時に」値が設定されていない
くらいかなぁ.
ご回答ありがとうございます。
サンプルと実行結果を以下に書きます。
ちなみにBL/FileIO.pmは存在していて、
use lib qq( $cmd_path ); → use lib qw( /home2/account );
とベタにパスを書けば問題なく実行できるのです。
$cmd_pathにも中身が入っているのです。。
サンプル
-----------------------------------------
#!/usr/local/bin/perl
unless( $cmd_name ){
if($0 =~ /(.+)\/([^\/]+)/){
$cmd_path = $1;
$cmd_name = $2;
}else{
$cmd_path = '.';
$cmd_name = $0;
}
unshift(@INC, $cmd_path);
}
use lib qq( $cmd_path );
use BL::FileIO;
・・・
-----------------------------------------
実行結果
-----------------------------------------
Can't locate BL/FileIO.pm in @INC (@INC contains: /usr/lib/perl5/5.6.1/i386-linux /usr/lib/perl5/5.6.1 /usr/lib/perl5/site_perl/5.6.1/i386-linux /usr/lib/perl5/site_perl/5.6.1 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.6.1/i386-linux /usr/lib/perl5/vendor_perl/5.6.1 /usr/lib/perl5/vendor_perl .) at /home2/account/test.pl line 15.
BEGIN failed--compilation aborted at /home2/account/test.pl line 15.
-----------------------------------------
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
INDIRECT 横に再度抽出したい
-
Strawberry Perl for Windows ...
-
perlのプログラミング 部分入れ...
-
Perlでファイルの末尾から指定...
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perl+DBD::Oracleのエラーがわ...
-
python
-
python 環境構築について
-
@INCにrequireされたファイルが...
-
use lib qw(変数名);は無理?
-
perl DBD::Pg インストールでエ...
-
Net::SSH::Perlについて
-
エラー内容がわかりません。Con...
-
Jcode.pmについて
-
英文でperlの文法などを説明し...
-
DBIをCPANからインストール時に...
-
DB_Fileモジュールインストール...
-
\\* の意味が分かりません。
-
SOAP::Liteを利用したい!
-
Pg.pmモジュールがロードできない
-
CygwinでPerlのCSV_XSを実行する
-
@INCにセットされたディレクト...
-
HTML::FillInFormが使えない(...
-
例外処理のフローチャートの記...
-
「デバイスは PRN を初期化でき...
おすすめ情報