Perlのプログラム実行方法と検索パス設定について

このQ&Aのポイント
  • Perlでプログラムを実行する際の正しい方法として、ファイルの一番先頭に「#! perlのフルパス」を入れることがあります。
  • 実行する前には実行権限を与えるために「chmod a+x ファイル名」というコマンドを実行します。
  • 検索パスがファイルを格納しているフォルダに通っていない場合、@INCに検索パスを加えることができますが、ターミナルで実行する方法が正しいか不明です。
回答を見る
  • ベストアンサー

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

プログラミング初心者です。 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 となってしまいます。 これはどのように実行するのが正しいのでしょうか? 基本的な知識が乏しくてすみませんがお願いします。

  • Perl
  • 回答数2
  • ありがとう数8

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

これは、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とは無関係です。

nazosiru
質問者

お礼

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

nazosiru
質問者

補足

>・bash等のB-sh系 >PERL5LIB=~(=の前後に空白を入れないこと) >export PERL5LIB これで@INCには追加されました。ありがとうございます。 しかし、まだファイル名だけでは実行されません。 >ただ、この環境変数は、Perlのスクリプトで use [モジュール] とした時等に、そのモ >ジュールを探すパスを設定するものなので、bashのcommand not foundとは無関係です。 このことがイマイチ理解できません。 「bashのcommand not foundとは無関係」とはどういうことでしょうか? シェルの基本的な知識も乏しい為、これから調べてみます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

#1 の回答を全部読みましたか? 「> @INCに検索パスをあらかじめ加えるには」 の前に書いてある日本語が理解できますか?

nazosiru
質問者

お礼

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

nazosiru
質問者

補足

補足に書かなくてすみません。 「./ファイル名」でコマンドの実行は出来ました。 私がよく分かっていなかったのが、 >「./」の無い場合 >→実行シェルの内部コマンド→環境変数PATHに設定された各ディレクトリにあるファイル >の順で探す というところだったようで、「>→実行シェルの内部コマンド~」という部分の理解が無く、環境変数PATHに任意のディレクトリを加えれば良いと思っていたところに問題がありました。 なので >ただ、この環境変数は、Perlのスクリプトで use [モジュール] とした時等に、そのモ >ジュールを探すパスを設定するものなので、bashのcommand not foundとは無関係です。 この部分の理解もできました。 そこでシェルのことをよく調べてみたいと思います。

関連するQ&A

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

    プログラミング初心者です。 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 となってしまいます。 これはどのように実行するのが正しいのでしょうか? 基本的な知識が乏しくてすみませんがお願いします。

  • シェルスクリプトの1行目に#!を書いてもダメなのはなぜ?

    test.shというシェルスクリプトを #!/bin/bash echo "bash test" のように書き、chmod +x test.shを実行し、 test.shと入力すると、bash testが表示されるはずですが、 エラーbash: test.sh :command not found が出ます。which bashでパスを見ると /bin/bashなので、問題ないはずなんですが。 ちなみに、bash test.shと入力すると、正常に実行されます。 同様のことがperlスクリプト #!/usr/bin/perl print "perl test\n"; についても起こります。 何か設定がまずいのでしょうか? RedHatLinux7.2を使用しています。

  • 超初心者です

    最近Perlの勉強を本をつかって始めたのですが、 最初の段階でつまずいています。 プログラムは #!/usr/bin/perl #プログラム:hello.pl print "Hello, world!\n"; という本当に実に単純なものなのですが、これをターミナルで実行しようとすると $ hello.pl bash: hello.pl: command not found と表示されてしまします。 $ perl hello.pl Hello, world! ではちゃんと動いています。 Perlの場所は $ find /usr -name perl /usr/bin/perl /usr/doc/db3-devel-3.2.9/ref/perl により間違っていないと思いますし、 chmod 755 hello.pl も行っています。 なにぶん初心者ですので何が他に理由でエラーになるのかわかりません。もしよろしければ、アドバイスをいただけるとうれしいです。 自分はVineLinux2.6を使っていてPerlのバージョンは5.006001です。

    • ベストアンサー
    • Perl
  • .cshrcでのエラー

    シェル初心者です。 現在、さくらのレンタルサーバで.cshrcの設定を行っています。 os :FreeBSD 9.1 64bit Perl : Ver.5.8.9です。 http://d.hatena.ne.jp/perlcodesample/touch/20101027/1278596435を参考にして .cshrc内に setenv PERL5LIB /home/hogehoge/local/lib/perl5:/home/hogehoge/local/lib/perl5/site_perl:$HOME/perl5/lib/perl5:$PERL5LIB; # @@ Added by CPAN local setup tool @@ setenv PERL_CPANM_OPT="--local-lib=~/perl5"; という記述を追加しましたが % source .cshrcを実行すると setenv: Variable name must contain alphanumeric characters. というエラーが出ます。 何やら変数名をアルファベットで書けと言っているようですが、 #setenv PERL_CPANM_OPT="--local-lib=~/perl5"; というようにこの一行をコメントアウトするとエラーは出ません。 どこがまずいのでしょうか? 初歩的な質問で恐縮ですが、宜しくご教授お願いいたします。

  • PERLのインストール

    PERLのインストールの際、インストール先をOSの入っているドライブにしなければ正常に機能しないのでしょうか?WIN98でPERLをインストールすると自動的にDドライブにインストールされてしまいます。そしてごく簡単なスクリプトを実行してみてもcan't find [ファイル名」,no such file ~としか表示されません。 またファイルを保存する場所はどこでもいいのでしょうか? ちなみにperl -vでは正常にバージョン情報など見ることはできます。 なにぶん初心者なもので、うまく説明できているかどうか解りませんが、よろしくお願いします。

    • ベストアンサー
    • Perl
  • @INCにrequireされたファイルが無い

    自作のCGIを実行したところ Can't locate BASE64 in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at g etHTTP line 71. のようなエラーが出ます。 BASE64がインストールされているかどうか確認するために、次のサイトのcheck.cgiを実行してみました。 http://perl.shtml.jp/check/check.html インストールされているということなので、検索を掛けてBase64.pmのパスを調べました。 C:\Perl\lib\MIME そこで以下のコードを追加して実行しなおしました。 unshift @INC, "C:/Perl/lib/MIME"; 残念ながらうまく動きませんでした。 Can't locate BASE64 in @INC (@INC contains: C:/Perl/lib/MIME C:/Perl/site/lib C: /Perl/lib .) at getHTTP line 71. どうすれば良いでしょう。 お手数をお掛けします。

    • ベストアンサー
    • Perl
  • perl初心者です。検索パスについて

    プログラム経験0の素人初心者ですが技術者向けの方が詳しい方がいらっしゃるかとこちらに書き込みしました。 perlを覚えようと本を買ってきましたが初めからつまづいてしまいました。 環境  winXP HomeEdition sp1 使用ソフト  cygwin  Poderosa(ターミナルエミュレーター) ホームディレクトリの設定と位置  設定「/cygdrive/c/myfolder」  位置「C:\myfolder」 本に書いてあったとおりに、以下のようにファイルを作り、myfolderに保存しました。 ファイル名:calc 中身:以下の通り #!usr/local/bin/perl print("2*3="); print(2*3); print("\n"); Poderosaでcygwinを起動し、 perl calcと打つと 2*3=6と返してくれるのですが、 chmod a+x calc calc と打つとウィンドウズ付属の電卓が起動してしまいます。 ファイル名をtest、中身をprint("test"); 等にした場合には、command not found となってしまいます。 検索パスの設定をしてない為かもしれませんが、検索パスの指定の仕方がわからず困っています。 システムの環境変数のPathの所でどう指定すればいいのでしょう。 どうぞアドバイス宜しくお願いします。

  • Perlの超初心者です。

    Perlの超初心者です。 mac osXを使っています。テキストエディットで、#! /usr/bin/perl print "hello world!\n";と書いてperl-test.plと保存しました。そしてターミナルを起動してperl-test.plとタイプしたのですが、-bash: perl-test.pl: No such file or directoryとなってしまいます。 試しにターミナルでperl -le "print 'hello world';"とタイプするとhello worldとかえってきました。 perl-test.plはfinderのデスクトップに保存してあります。いったいどうすればperl-test.plのファイルを実行できるのですか? 教えて下さい。よろしくお願いします。

  • 初心者 Hello worldをしたい

    ActivePerl をインストールしました。 早速、Hello worldを表示させようと思うのですが メモ帳に「print "Hello world!!\n";」と記載して 「hello.pl」という名前で保存しました。 それをデスクトップにおきました。 その状態で コマンドプロンプトで「perl hello.pl」を実行しても Can't open perl script "hello.pl": No such file or directory (和訳:開いたperlは、「hello.pl」のスクリプトを書くことができません:そのようなファイルまたはディレクトリ) が返って来ます。 多分、デスクトップにおくのが間違いだと思うのですが どこに「hello.pl」を置いて 「perl hello.pl」を実行すればいいのでしょうか? ご教授よろしくお願い致します。

    • ベストアンサー
    • Perl
  • perlでパスが通らない?

    環境はwindowsXPです。 パスがうまく通っていないようです。perl.exeが入っているファイルへのパスは正常に働いているのに、自分で作ったファイルを置いているC:\documents and settings\user\my document\perlというファイルへのパスがうまくはたらきません(Can't open perl script "test.pl": No such file or directoryと表示されます) コマンドプロンプトで「path」を使ってみても上記のフォルダはちゃんとPathに記述されています(;も入っています)。 何がいけないのでしょうか?

専門家に質問してみよう