- ベストアンサー
Perlのプログラム実行方法と検索パス設定について
- Perlでプログラムを実行する際の正しい方法として、ファイルの一番先頭に「#! perlのフルパス」を入れることがあります。
- 実行する前には実行権限を与えるために「chmod a+x ファイル名」というコマンドを実行します。
- 検索パスがファイルを格納しているフォルダに通っていない場合、@INCに検索パスを加えることができますが、ターミナルで実行する方法が正しいか不明です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
これは、Perlというより、unix系OSと、それのシェルの問題です。 > -bash: ファイル名: command not found unix系OSの標準的なシェルでは、 コマンド名に ディレクトリの区切り(/)が有る場合 →ファイル名と解釈して、そのファイルを実行しようと試みる 無い場合 →実行シェルの内部コマンド→環境変数PATHに設定された各ディレクトリにあるファイルの順で探す となります。ここで注意しないといけないのが、無い場合の実行候補の中に「カレントディレクトリから探す」というのが無い、ということです。 (WindowsやMS-DOS 等と違って)PATHに . を明示しないかぎり、カレントディレクトリからは実行ファイルを探しません。 方法は2つあります。 1)「 ./ファイル名 」のように、カレントディレクトリであることを明示する 2) PATHに . を追加する(ただし、こちらの方法は非推奨です) > @INCに検索パスをあらかじめ加えるには > % setenv PERL5LIB 加えたいパス > で出来るようですが、ターミナルで実行しても > Can't open perl script "setenv": No such file or directory > となってしまいます。 どんなものを実行しました? エラー表示と上にある実行コマンドとの間に違いがあるのですが。 perl setenv PERL5LIB ... とかやったんじゃないですか? 環境変数をシェルで設定するには、それぞれのシェルで方法が違います。 ・bash等のB-sh系 PERL5LIB=~(=の前後に空白を入れないこと) export PERL5LIB ・tcsh等のcsh系 setenv PERL5LIB ~ ただ、この環境変数は、Perlのスクリプトで use [モジュール] とした時等に、そのモジュールを探すパスを設定するものなので、bashのcommand not foundとは無関係です。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
#1 の回答を全部読みましたか? 「> @INCに検索パスをあらかじめ加えるには」 の前に書いてある日本語が理解できますか?
お礼
ご回答をありがとうございました。
補足
補足に書かなくてすみません。 「./ファイル名」でコマンドの実行は出来ました。 私がよく分かっていなかったのが、 >「./」の無い場合 >→実行シェルの内部コマンド→環境変数PATHに設定された各ディレクトリにあるファイル >の順で探す というところだったようで、「>→実行シェルの内部コマンド~」という部分の理解が無く、環境変数PATHに任意のディレクトリを加えれば良いと思っていたところに問題がありました。 なので >ただ、この環境変数は、Perlのスクリプトで use [モジュール] とした時等に、そのモ >ジュールを探すパスを設定するものなので、bashのcommand not foundとは無関係です。 この部分の理解もできました。 そこでシェルのことをよく調べてみたいと思います。
お礼
ご丁寧にありがとうございました。
補足
>・bash等のB-sh系 >PERL5LIB=~(=の前後に空白を入れないこと) >export PERL5LIB これで@INCには追加されました。ありがとうございます。 しかし、まだファイル名だけでは実行されません。 >ただ、この環境変数は、Perlのスクリプトで use [モジュール] とした時等に、そのモ >ジュールを探すパスを設定するものなので、bashのcommand not foundとは無関係です。 このことがイマイチ理解できません。 「bashのcommand not foundとは無関係」とはどういうことでしょうか? シェルの基本的な知識も乏しい為、これから調べてみます。