マンガでよめる痔のこと・薬のこと

プログラミング初心者です。

MACを使用しています。

Perlでプログラムを実行する際に、
% perl ファイル名
とせずに
% ファイル名
とする方法としてファイルの一番先頭に
% #! perlのフルパス
を入れると本に書いてあります。その際、実行する前に
% chmod a+x ファイル名
で実行権限を与える、とありました。

実際にやってみると
-bash: ファイル名: command not found
となってしまいます。

そこでperlのフルパスが間違いなのかとperlのヴァージョンを調べる方法
% perlのフルパス -v
を実行するとちゃんとヴァージョン名が出ます。

あとは検索パスがファイルを格納しているフォルダに通っていないからだと思うのです。@INCに検索パスをあらかじめ加えるには
% setenv PERL5LIB 加えたいパス
で出来るようですが、ターミナルで実行しても
Can't open perl script "setenv": No such file or directory
となってしまいます。
これはどのように実行するのが正しいのでしょうか?
基本的な知識が乏しくてすみませんがお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (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とは無関係です。

この回答への補足

>・bash等のB-sh系
>PERL5LIB=~(=の前後に空白を入れないこと)
>export PERL5LIB

これで@INCには追加されました。ありがとうございます。

しかし、まだファイル名だけでは実行されません。

>ただ、この環境変数は、Perlのスクリプトで use [モジュール] とした時等に、そのモ
>ジュールを探すパスを設定するものなので、bashのcommand not foundとは無関係です。

このことがイマイチ理解できません。
「bashのcommand not foundとは無関係」とはどういうことでしょうか?
シェルの基本的な知識も乏しい為、これから調べてみます。

補足日時:2010/10/17 01:40
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございました。

お礼日時:2010/10/17 18:00

#1 の回答を全部読みましたか?


「> @INCに検索パスをあらかじめ加えるには」
の前に書いてある日本語が理解できますか?

この回答への補足

補足に書かなくてすみません。
「./ファイル名」でコマンドの実行は出来ました。

私がよく分かっていなかったのが、

>「./」の無い場合
>→実行シェルの内部コマンド→環境変数PATHに設定された各ディレクトリにあるファイル
>の順で探す

というところだったようで、「>→実行シェルの内部コマンド~」という部分の理解が無く、環境変数PATHに任意のディレクトリを加えれば良いと思っていたところに問題がありました。

なので

>ただ、この環境変数は、Perlのスクリプトで use [モジュール] とした時等に、そのモ
>ジュールを探すパスを設定するものなので、bashのcommand not foundとは無関係です。

この部分の理解もできました。

そこでシェルのことをよく調べてみたいと思います。

補足日時:2010/10/17 17:59
    • good
    • 0
この回答へのお礼

ご回答をありがとうございました。

お礼日時:2010/10/17 18:03

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング