• 締切済み

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の所でどう指定すればいいのでしょう。 どうぞアドバイス宜しくお願いします。

みんなの回答

回答No.2

補足すべき事が2点。 1.スクリプトファイルの内容 >#!usr/local/bin/perl #!/usr/local/bin/perl として下さい。 ルートからの絶対パスでないと、セキュリティ上危険であり、 正しく動いたり/動かなかったり、動作が不定になるので。 2.”./calc”での確認は.. コマンドに、"./"をつけるとコマンドサーチは、検索パスを使わず、 相対ディレクトリと認識して、自ディレクトリで探します。 (この場合、カレントディレクトリで、calcを探す) >windows側の環境変数も教えて頂いたサイトを参考にやってみましたが、それでも./calc と打つと >: bad interpreter: No such file or directory >となってしまいます。 考えるされるのは、 (1) calcコマンド(スクリプト)が見つからない (2) perlが相対パスによる呼び出しのため、perlが見つからない という理由でエラーになってませんか? #!の記述を見直し、./calcを確認してください。

yuzu38
質問者

お礼

再度レス頂いていたのに気づきませんでした、お礼が遅くなりまして本当にごめんなさい! >#!usr/local/bin/perl はこちらでの書き込みで記述ミスしていただけで、実際のプログラムの方では ちゃんと#!/usr/local/bin/perlで記述していました、ご指摘有難うございます。 >(1) calcコマンド(スクリプト)が見つからない >(2) perlが相対パスによる呼び出しのため、perlが見つからない >という理由でエラーになってませんか? #!の記述が合っていましたので、どうして起動しないか分かりませんが、 相変わらず「perl プログラム名」と打てば、その後打ったどのプログラムも 正常に動作していますので、そのまま使っています。 丁寧なご返答頂き有難うございました。

回答No.1

試しに、perlスクリプトを次の書き方で起動してみて下さい。 スクリプトをカレントディレクトリに置いた状態で.. ./calc ./test それで予定のスクリプトが実行されるなら、Windows側の 環境変数は関係なくて、cygwin側のシェルでのパス設定の 問題です。 参考URLに示したページの中程にある「環境設定(Cygwin内部)」の 部分を参照して下さい。 PATH=でシェルのコマンド検索パスを記述していますが、cygwinの シェルは、これに従って起動すべきモノを探すはずです。

参考URL:
http://www.mars.dti.ne.jp/~sohda/cygwin/setenv.html
yuzu38
質問者

お礼

cygwinの方は、Poderosa(ターミナルエミュレーター)が勝手に設定してくれるようで、bashrcというファイルや.bash_profileというファイルがあり、.bash_profileの中で # Set PATH so it includes user's private bin if it exists # if [ -d "${HOME}/bin" ] ; then # PATH=${HOME}/bin:${PATH} # fi # Set MANPATH so it includes users' private man if it exists # if [ -d "${HOME}/man" ]; then # MANPATH=${HOME}/man:${MANPATH} # fi # Set INFOPATH so it includes users' private info if it exists # if [ -d "${HOME}/info" ]; then # INFOPATH=${HOME}/info:${INFOPATH} # fi のように設定されていて、これに何か追加したり、これ自体を変更しようとすると動作不良を起こしてしまいます。.bashrcファイルの方も同様です。 windows側の環境変数も教えて頂いたサイトを参考にやってみましたが、それでも./calc と打つと : bad interpreter: No such file or directory となってしまいます。 もう少し色々やってみます、有難うございました。

関連するQ&A