solaris8・perl5.6.1において、作成したperlのスクリプトを実行する時に、
頭にperlをつけて

$ perl ファイル名

としないとスクリプトが実行できません。
実行ユーザーにパスはとおっています。
普通に
$ ファイル名
で実行するにはどうしたら良いかアドバイス頂けないでしょうか。
よろしくお願いいたします。

A 回答 (3件)

> 実行ユーザーにパスはとおっています。



「実行ユーザにパスが通っている」という意味が分かりません。

スクリプトファイルを、シェルを指定せずに動作させる条件は、以下の三つです。

(1) スクリプトの第一行にシェルを指定する
(2) スクリプトファイルに、実行権限がついている
(3) スクリプトファイルがある場所に、パスが通っている

具体的には、以下の通り。

> $ perl ファイル名
>
> としないとスクリプトが実行できません。

とあるので、カレントディレクトリにあるスクリプトを実行しようとしているのだと
想像します。

(1) は、そのスクリプトファイルの第一行が以下のようになっていることです。

#!/usr/local/bin/perl

(Perl の実行モジュールが置かれている場所によって変わる可能性はあります。)

(2) は、chmod コマンドを使います。

$ chmod +x スクリプトファイル名

(3) は、env コマンドで確認してみましょう。多分、カレントディレクトリには、
PATH は通っていないはず。

(1) と (2) の条件を満たしているのであれば、

$ ./スクリプトファイル名

と、カレントディレクトリに有ることを明示的に指定して実行してみて下さい。

この回答への補足

こんにちは。いつもアドバイスありがとうございます。

>「実行ユーザにパスが通っている」という意味が分かりません。
すみません。実行権限があるのと、カレントにパスが通っているのを
ごちゃごちゃにしてしまいました。

ひとつずつ確認していくと、
(1)はOKです。
(2)も777の設定になっています。
(3)やっぱりあやしいのはここですよね。
でもenvコマンドで確認しても、ちゃんと
PATH=/usr/sbin/:/usr/bin:/usr/local/bin
と出てきます。
ちなみに./ファイル名とやると実行できるので、やはりパスの問題ですよね。。
もうちょっと調べてみます・・。(;_;)
ありがとうございました。

補足日時:2001/11/06 17:36
    • good
    • 0

> ちなみに./ファイル名とやると実行できるので、やはりパスの問題ですよね。



であれば、そのスクリプトファイルを置いてある所を PATH に含めればいいですね。
例えば、

$ PATH=${PATH}:/home/bunnyLove/script ; export PATH

とか。

カレントディレクトリを PATH に含めるのは、余り感心しませんが、もしやるのだったら

$ PATH=${PATH}:. ; export PATH

ですかね。

# csh なら、setenv コマンドを使いましょう
    • good
    • 0
この回答へのお礼

補足説明ありがとうございます。
やっぱりパスは通さないで./つきで実行するようにします。
いつもわかり易いアドバイスありがとうございます。
また何かの折りには宜しくお願いいたします。

お礼日時:2001/11/09 14:11

一応確認ですが…。


先頭行に、

#!/usr/local/bin/perl

等の記述はありますか?
また、スクリプトファイルには実行権は付いていますか?
御確認下さい。

#パスは勿論ご使用のマシンに合わせて御確認下さい。
    • good
    • 0
この回答へのお礼

naturalさんアドバイスありがとうございます。
#!/usr/local/bin/perl の記述と、実行権限はついていました。
また何かありましたらアドバイスお願いいたします。

お礼日時:2001/11/06 17:35

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qperl niftyについて。use CGI;

画像アップロードのスクリプトを作ろうと思っているのですが、

use CGI;
という記述をすると、ここでエラーに引っかかります。
下はperl checkerでのエラー表示です

Can't locate CGI.pm in @INC (@INC contains: /usr/local/lib/perl5/5.00503/sun4-solaris /usr/local/lib/perl5/5.00503 /usr/local/lib/perl5/site_perl/5.005/sun4-solaris /usr/local/lib/perl5/site_perl/5.005 .) at a.cgi line 10.
BEGIN failed--compilation aborted at a.cgi line 10.

参考URLはここ
http://www.topstudio.co.jp/~kmuto/html/node38.html

niftyでは使えないようになってしまっているのでしょうか?

また、CGI.pmを使わないファイルアップロードの仕組みを解説しているサイトを知っている方がいたら、教えてくださいませ。

画像アップロードのスクリプトを作ろうと思っているのですが、

use CGI;
という記述をすると、ここでエラーに引っかかります。
下はperl checkerでのエラー表示です

Can't locate CGI.pm in @INC (@INC contains: /usr/local/lib/perl5/5.00503/sun4-solaris /usr/local/lib/perl5/5.00503 /usr/local/lib/perl5/site_perl/5.005/sun4-solaris /usr/local/lib/perl5/site_perl/5.005 .) at a.cgi line 10.
BEGIN failed--compilation aborted at a.cgi line 10.

参考URLはここ
http://www.topst...続きを読む

Aベストアンサー

 cgi-lib.pl というモジュールを使うのが一般的です。
 この "cgi-lib.pl" という文字列をキーワードに検索すると、たくさん出てきますよ。

 自分だけで使う場合はともかく、フリーソフトとして公表するときは CGI.pm がないプロバイダの場合に困るので、あんまり使わないんですよ。

Qperlスクリプト s/^\s+//;  s/\s+$//;  return wantarray ? @out : $out[0]; について

自作の掲示板を作ろうと思い、perlの勉強をしている者です。人様の作ったスクリプトを解析しています。以下のスクリプトはライブラリに記述されていたものです。


sub tttt {
my @out = @_;
for (@out) {
s/^\s+//;
s/\s+$//;
}
return wantarray ? @out : $out[0];


このスクリプトなんですが、 s/^\s+//; の部分の「+」と s/\s+$//; の部分の「+$」、 また「return wantarray~」 の三つの部分のスクリプトが、どういった働きをしているの分かりません。専門書やウェブ上のリファレンスも色々調べたのですが・・。

分かる方いらっしゃいましたらご教授下さると幸いです。よろしくお願いします。

Aベストアンサー

まず前2つの「+」は,正規表現における,「直前の表現を一回以上繰り返し」をあらわします.
「\s」は空白文字一文字を表す正規表現ですので,「\s+」は,「一文字以上の空白文字」になります.
次に,最初の「^」と2番目の「$」は,その正規表現がどこに現れるかを示す記号です.それぞれ,先頭と最後尾にあることを示します.
したがって,「^\s+」は,「最初に空白が一文字以上ある文字列」に,
「\s+$」は「行末に空白が一文字以上ある文字列」にヒットします.
置換構文sはご存知なんですかね.すなわち,この2文で,行の最初と最後の空白を消しているんです.

次に, wantarray ですが,
http://www2u.biglobe.ne.jp/~MAS/perl/ref/wantarray.html
によると,このサブルーチンttttを呼び出すときに,何を返り値にしているかで真偽が決まる関数です.
呼び出す時に配列を希望していたら @out 全体を,変数を希望していたら $out[0]だけを返します.

Qc言語とperlのcgi設定方法

(Arch linuxにてlighttpdサーバを立ち上げています)
cgiは一般にperlが多いとは思いますが、C言語からのcgiも試みています

perlによるcgiを有効にするにはlighttpd.confの設定に以下を追加

 server.modules += ( "mod_cgi" )
 cgi.assign = ( ".cgi" => "/usr/bin/perl")
 static-file.exclude-extensions = ( ".cgi" )

C言語から作成したcgiを有効にするにはlighttpd.confの設定に以下を追加

 server.modules += ( "mod_cgi" )
 cgi.assign = ( ".cgi" => "")
 static-file.exclude-extensions = ( ".cgi" )

同一のサーバ下で「"/usr/bin/perl"」「""」ともにを有効にする設定方法はありますでしょうか
よろしくお願いいたします

(Arch linuxにてlighttpdサーバを立ち上げています)
cgiは一般にperlが多いとは思いますが、C言語からのcgiも試みています

perlによるcgiを有効にするにはlighttpd.confの設定に以下を追加

 server.modules += ( "mod_cgi" )
 cgi.assign = ( ".cgi" => "/usr/bin/perl")
 static-file.exclude-extensions = ( ".cgi" )

C言語から作成したcgiを有効にするにはlighttpd.confの設定に以下を追加

 server.modules += ( "mod_cgi" )
 cgi.assign = ( ".cgi" => "")
 static...続きを読む

Aベストアンサー

同じ拡張子で…ということかと思われます。>#1

で、該当のものを試したコトはありませんが……

>cgi.assign = ( ".cgi" => "")
に設定して、perlの方は
http://www.perl-labo.org/junbi/iamperl.htm
の設定を行い、cgiファイルに実行可のパーミッション付けてみたらどうです?

Qperlスクリプトをコマンドラインから実行する際、ファイル名だけで動かしたい

はじめまして。どうぞ宜しくお願いします。

コマンドラインでperlを実行する際、

$ perl test.pl

と先頭に「perl」をつけると正しく動作しますが、

$ test.pl

と「perl」を外すと以下のようなエラーが出ます。
$ -bash: test.pl: command not found

もう一台あるLinux機では、プログラム名だけでも動作しているので
何らかの方法があるのだと思います。
たとえば、Windowsで言う拡張子の関連付けなどのような事ができるのでしょうか。

ご存じの方がおられましたら、よろしくお願いします。

OS:RedHat9

Aベストアンサー

test.pl のあるディレクトリが $PATH に入っていないのかも.

Qなぜ CGI は Perl 言語で作成/動く環境が多いのか。

最近 CGI に興味をもちここで質問しながらネット検索をしました。
すると Perl 言語での CGI サンプルが一番多く C 言語で作る CGI の
サンプルが少し見つかりました。
私の使っている無料サーバーでも CGI は使えますが Perl 言語だけ有効です。
セキュリティの問題で SSI と組み合わせた C 言語の CGI は実行出来ないようです。

質問内容:
(1)なぜ CGI は Perl 言語が一番多いのか?→PHP、Cもあるのに
(2)なぜ無料サーバーの多くが Perl 言語しか使えないのか?
(3)処理の重い CGI を使うとサーバーがダウンするので使わないようにと
 私の使っている無料サーバー(infoseek)でなっています。どの程度の
 処理のことでしょうか?

上記の3つまたは1つでもアドバイスをして欲しいです。
回答をお待ちしています。

Aベストアンサー

>(1)なぜ CGI は Perl 言語が一番多いのか?→PHP、Cもあるのに
Cのコンパイルはどうする気ですか?
共有型のレンタルサーバでSSHログインができてCのコンパイルまでさせてくれる
サービスは自分は知りません。
PHPに関してはサーバの方針でしょうね。
infoseekはinfoseekになる前のfreewebの頃からPerlだけ利用できました。
途中から仕様変更して全サーバに対してPHPをインストールするのは手間でしょうから

>(2)なぜ無料サーバーの多くが Perl 言語しか使えないのか?
PerlもPHPも使えるサーバも結構ありますよ。

>(3)処理の重い CGI を使うとサーバーがダウンするので使わないようにと
今の利用規約は知りませんが自分の知っているときは
箱庭系、チャット系、CGIゲーム系はだめですね。

>modによりperlの難点であった実行速度も改善されていますし。
CGIモードとmod_perlのそれぞれバージョンで挙動が違うみたいで
普段はあまり利用しないですね。

QPerlスクリプトが、ローカルでは実行できるが、HTTP経由では実行できない

現在Perlスクリプトを作成し
サーバにアップしました。

SSHでサーバにログインし

#perl a.cgi
と実行したところ(CGIとして動作させるため。中身はPerlスクリプト)

Content-type: text/html

<html>
<body>
あああああ
</body>
</html>

のようなメッセージが表示され正常に動作しているとおもいます。

しかし、
http://www.hoge.com/a.cgi をURLとしてブラウザ上で実行すると
500 Internal Server Error
になります。

パーミッションは755で正常
Perlのパスは#!/usr/bin/perlとしており、これも正常です。

文字コードはeuc-jp 改行コードLF

サーバはApache/1.3.33
Perlバージョンは5.8.4

自分のパソコン上でperl+HTTPサーバ(httpd)を使うと
HTMLふぁいるとして出力されます。
サーバ上でHTTPを使ってアクセスしたときのみエラーとなります。

このような現象が起こるのですが原因がわかりません。
お願いします。

現在Perlスクリプトを作成し
サーバにアップしました。

SSHでサーバにログインし

#perl a.cgi
と実行したところ(CGIとして動作させるため。中身はPerlスクリプト)

Content-type: text/html

<html>
<body>
あああああ
</body>
</html>

のようなメッセージが表示され正常に動作しているとおもいます。

しかし、
http://www.hoge.com/a.cgi をURLとしてブラウザ上で実行すると
500 Internal Server Error
になります。

パーミッションは755で正常
Perlのパス...続きを読む

Aベストアンサー

>500 Internal Server Error
これは、パーミッションの問題ではなく、実行エラーですよね。
一行目は以下だけですか? よけいなブランク文字やスイッチとか後ろに付いてると、サーバーによってはエラーにされてしまう事があります。
コマンドライン実行では、スイッチ有効なのでエラーにならないから、こういう現象になるのかも。
#!/usr/bin/perl

※ perl cgi覚えたての頃、一行目の後ろにコメントを付けていて、unix系サーバーにアップするとエラーになったのだけど、原因がわからず四苦八苦した覚えが。。。
windows local サーバーでは、一行目を無視してたので気付くのが遅れた。

あとは、実際のスクリプトの方を見ないことには?
なにか、そのサーバーでは使えないモジュールを使うような指定があったりとかしませんか?

QPerlとphpのCGI版

Perlは文書に最適化された言語だと今日知りました。
そこで思ったのですが、PerlとphpのCGI版の場合だと
ファイルの読み書きなどを考えてみたところ、速度にさほど違いはないのでしょうか?
mod_perlとphpのモジュール版の速度は同じくらいだと聞きます
となればphpのCGI版はさほど早くなく、Perlと同程度じゃないかと思ったわけです

どなたか教えてください!

Aベストアンサー

たびたびすみません。
ANo.1 で紹介した比較の、CGI版もありました↓
http://www.hippo2000.info/perl/tbench.htm

やはり結果は、同じようなもの、のようですね。
結局、処理する内容によって勝敗が異なるので一概には言えないと思いますが、それは同時に「それほど微妙な差である」ことを意味すると思います。つまり絶対的な優劣はないです。
それこそプログラマーの好みや事情で決めれば良いレベルだと思います。「DBならPHP」などと言われることもありますがperlでも当然可能ですし、どちらかにしかできないこともなく、PHPは初心者にも簡単で覚えやすい、という利点もあります。

ちなみに私は、特にどちらが好きというのはありませんが、なぜかCGI版perlとmod版PHPが比較されることが時々あり、そして決まって「PHPのほうが速い」などと不可解な結論に…、というのが疑問なんですよね。
推測ですが、perlのほうが圧倒的に歴史が長いため、CGI版さらには旧いバージョンが対象にされてしまっているのでは、と考えています。
そのような不公平な勝負では、ついつい不利な方を応援したくなります(笑)。

さらに言えば、「PHPのほうが簡単」というのもちょっと疑問で、ご存知かと思いますが、そもそもperlは「Practical Extraction and Report Language」の略、dakara222さんのおっしゃるように本来テキスト処理を大得意とするレポート言語です。便利ゆえにWebサイトに設置してページの出力に使うことが多いですが、本来、たとえば手元のウィンドウズにインストールしておいて、「HTMLファイルそのもの」を大量に作らせる、なんていうことや、DBのソースを作ったり、システム管理者が設定ファイルの編集によく使っている、など、大変便利な本来の(?)使い方があります。
PHPはHTML文書内での使用に特化したものですから、そのために最適化されているわけで、当然そこだけでの比較はおかしいんですよね。

なんだかperl寄りの意見になってしまいましたが(苦笑)…、正しい情報を持ってケースバイケースで使い分けるのが一番ですね。

たびたびすみません。
ANo.1 で紹介した比較の、CGI版もありました↓
http://www.hippo2000.info/perl/tbench.htm

やはり結果は、同じようなもの、のようですね。
結局、処理する内容によって勝敗が異なるので一概には言えないと思いますが、それは同時に「それほど微妙な差である」ことを意味すると思います。つまり絶対的な優劣はないです。
それこそプログラマーの好みや事情で決めれば良いレベルだと思います。「DBならPHP」などと言われることもありますがperlでも当然可能ですし、どちらかにしかでき...続きを読む

QPerlスクリプトが実行できない??どうやったら実行できる?

前にPerlスクリプトを実行する際に、
まず、PCに何かインストールしてから
実行できるようになったのを覚えています。

パソコンを再インストールしたのですが、
何をインストールすれば実行できるように
なるか忘れてしまいました。

実行すると
ERROR:cmd~~:Cannot start command. (perl.exe ~~.pl 1152 864) と出ています。

どなたか教えてください。

windows2000を使用しています。

Aベストアンサー

Active Perlをインストールしてください。

参考URL:http://penguin.nakayosi.jp/windows/perl.html

QCGI/Perl

CGI/Perlについて1から学びたいと思い、本を買おうと思っているのですが、たくさんありすぎて、どれを買えばわかりません。
CGIやPerlについてはまったくの初心者です。
いい本があったら教えてください。

Aベストアンサー

超簡単なCGI/Perlを学ぶ本は

技術評論社
速習webプログラミング
perl/CGI超入門
藤森水絵著

がいいと思います

(でもこの本JAVASCRIPTでできることたくさん乗ってるけどね・・・)

参考URL:http://www.gihyo.co.jp/books/syoseki.php/4-7741-1662-9

Q[perl] $xxx == 1 or $xxx == 5 or $xxx == 11 などと書くが面倒です

タイトルの通りです

if文などで長々と書くのが面倒なのですが何かいい方法はないのでしょうか?
以前はif($xxx =~ /^1$|^5$|^11$/)などと書いていたのですが、正規表現を使うと処理が遅いんですね

なるべく処理が軽くて簡潔な書き方がありましたら紹介してください

Aベストアンサー

配列なら
my @array = (1, 5, 11);
if (grep {$_ == $xxx } @array) { ... }
とかかな. ハッシュなら
my %valid = ( 1 => 1, 5 => 1, 11 => 1 );
if ($valid{$xxx}) { ... }
のような感じ (「ハッシュを使った重複チェック」のバリエーション).
あ,
if ($xxx == (1 or 5 or 11)) { ... }
のような形は, (そのままじゃないけど) Perl6 でサポートされる予定になっています. いつのことかは知りませんが.


人気Q&Aランキング