• 締切済み

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のファイルを実行できるのですか? 教えて下さい。よろしくお願いします。

  • Perl
  • 回答数5
  • ありがとう数9

みんなの回答

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.5

「#! /usr/bin/perl print "hello world!\n";」は一行に書いてあるのですか? でしたら #!/usr/bin/perl print "hello world!\n"; と2行にしてみて、「./perl-test.pl」を実行してみたらどうなりますか? (該当ファイルに実行モードが付与されているのが前提ですが)

bou-2212
質問者

お礼

ご回答誠にありがとうございます。また、お礼を申し上げるのが遅れてしまい申し訳ありません。#! /usr/bin/perl print "hello world!\n"は一行にあった訳ではごさいません。一応改行してあります。すいません、ややこしい書き方で。 当時は超超初心者であったため、別のディレクトリにファイルを置きながら、./perl-test.plを実行していました。実行できなかったのはそのためです。 unix/linuxの本を読んだり教えてもらったりしてなんとか解決できました。 どうもご回答ありがとうございました。

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

「うまくいかない」ときに, 単に「うまくいかない」というのはダメな表現です. これでは相手に「何が起きているのか」が伝わりませんよね. 単に「うまくいかない」とするのではなく, ・どのような操作をしたのか ・それによってどのようなことが起きると期待したのか ・実際にはどのような結果が得られたのか をきちんと書くようにしましょう. もとの質問文では (完全ではないが) ちゃんとできてるのになぁ.

  • Suzi
  • ベストアンサー率38% (130/334)
回答No.3

 取り急ぎ、ご回答しますと、MacOS XにはあらかじめApacheとPHPがインストールされています。  その方法は、 1) システム環境設定 → 共有 → Web 共有 にチェックを入れます。 2) それによってそのMac本体内での簡易サーバーが構築されました。 3) それらのサーバー、つまり、htmlやPHP、Perl(cgi)が稼働するフォルダは、↓ 4) HDD → ユーザー → ホーム(家のアイコンで任意のフォルダ名) → サイト 5) そのフォルダ「サイト」がサーバーになりその中に入れたhtml等を見ることができます。 6) デフォルトで、index.htmlがあると思います。 7) このサーバにアクセス、つまり表示させるのは、ブラウザー(Safariとか)を立ち上げ、urlは共通的に「http://127.0.0.1/」、またはhttp://127.0.0.1/index.html」です。 8) Perl(cgi)は残念ながら、そのままでは稼働しないです。  その設定は、↓以下のURL などを参照しながら自力設置するのがベターと思います。  情報が古いですが、基本は同じだと思います。 9) PHPはそのまま動きますので、perl-test.pl を perl-test.php にして、そのフォルダに入れて、内容を <?php print 'hello world'; ?> にして、safariとかで、http://127.0.0.1/perl-test.php にアクセスすれば表示されると思います。  因に、その「サイト」へのターミナルのパスは、ターミナルを立ち上げたら Desktop Downloads Movies Pictures Sites Documents Library Music Public と表示されていたら、 cd ./Sites 改行 次にそのフォルダ内を表示させる ls 改行 Perlを稼働するように設定していなければ、仮にそこに perl-test.pl があっても稼働しませんです。 設定してあれば、そのまま、./perl-test.pl 改行 とすれば、hello world とターミナルに表示されます。 上手く行くことを願っています。

参考URL:
http://homepage1.nifty.com/glass/tom_neko/web/web_cgi_osx.html
bou-2212
質問者

お礼

こんにちは。ご回答誠にありがとうございます。URLも教えて頂いてありがとうございました。 教えて頂いた事と、URLを参考にして試してみます。上手く行きましたら再度お礼申し上げますので、暫しお待ちくださいませ。

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

(Finderの)デスクトップ: → $HOME/Desktop で、何も設定してなければ、bashのPATHには含まれていません。 実行属性: → ls -l とすると、 -rw-r--r-- とか頭についてるけど、その中に x という文字があるか、あるならどこか。 前から4文字目にxが無いなら、自分についての実行権限がない。 実行方法: ・perlの引数にスクリプトを指定する。 絶対パスで指定 perl $HOME/Desktop/perl-test.pl 相対パスで指定(カレントディレクトリが$HOME) perl Desktop/perl-test.pl 相対パスで指定(カレントディレクトリがデスクトップ) perl perl-test.pl perl ./perl-test.pl ・実行属性を付けて、コマンドとして実行する 絶対パスで指定 $HOME/Desktop/perl-test.pl 相対パスで指定(カレントディレクトリが$HOME) Desktop/perl-test.pl 相対パスで指定(カレントディレクトリがデスクトップ) ./perl-test.pl (何も設定してなければ perl-test.pl だけではだめ。カレントディレクトリは探索外) PATHにデスクトップを追加した上で perl-test.pl デスクトップをPATHに追加するのは、お勧めできない。 Perlの練習するなら、ホームの下に練習用のディレクトリを作ってそこでやった方がいいと思う。 あと、ここら辺の実行方法については、UnixやLinuxの本や解説サイトが参考になる。 Windowsで解説しているものは使わないように。

bou-2212
質問者

お礼

こんにちは。ご親切に解答して頂いて誠にありがとうございます。私のやり方がまずかったと思うのですが、教えて頂いたとおりにやってみてもどうも上手く行きません。なのでもう少しwebや書籍を調べてみようとおもいます。上手くいきましたら再度お礼申し上げますので暫しお待ちくださいませ。

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

これは Perl とは全然関係なく, MacOS X (あるいは Unix) のスキルの問題なんだろうなぁ. というわけで MacOS X は触ってませんが Unix 全般の話で: Unix では, ターミナルから「perl-test.pl」と入力すると環境変数 $PATH に指定されたディレクトリ (そのようなディレクトリは「パスが通っている」といいます) から perl-test.pl というファイルを捜し, 「実行属性がついていれば」実行します. ということで, とりあえず以下の点に気を付けてください: ・「finder のデスクトップ」にパスが通っていますか? → Yes: 次に進む, No: 「PATH=$PATH:『finder のデスクトップ』」と入力してパスを通す (「finder のデスクトップ」がなんであるかは知りません) ・その perl-test.pl に実行属性はついていますか? → Yes: さらに次に進む, No: chmod を使って実行属性をつける ・Perl は /usr/bin にありますか? → Yes: 動くはずなんだけどなぁ, No: 先頭行の /usr/bin/perl を「Perl の場所」にあわせて適宜修正する 念のため注意しておくと, MS-DOS (や Windows) などとは違い, 通常 Unix ではカレントディレクトリにパスは通っていません (もちろん設定すれば通すことはできるが, そうしないことが推奨されている). なので, カレントディレクトリに perl-test.pl というファイルがあったとしても (そして実行属性がついていたとしても) 単に「perl-test.pl」と入力するだけでは実行できません. そのような状況のときには, 「./perl-test.pl」と先頭に「./」をつけて明示的に「カレントディレクトリにあるファイルを実行する」ことが必要になります.

bou-2212
質問者

お礼

こんにちは。ご回答どうもありがとうございます。ご丁寧に教えて頂いて感謝しておりますが、私のunixに関する知識不足のため、まだ上手く行きません。なのでもうちょっと調べてみます。 上手くいきましたら再度お礼申し上げますので、暫しお待ち下さいませ。

関連するQ&A

  • 超初心者です

    最近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
  • perlの起動法

    perl起動法について質問なのですが、 perlでファイルを作り、一番上に#!/usr/bin/perlと書いて、perl.plという名前で保存しました。 ターミナルで$chmod 755 perl.pl $./perl.pl とコマンドをうったのですが、print文で書いたhello worldというが表示されません。 でもperl perl.plとコマンドを打つと実行されます。 一体この違いはなんなのでしょうか?学校の課題で、どうしても./perl.plとして実行させなければならないので是非解答お願いします。

    • ベストアンサー
    • Perl
  • 初心者 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 初めてのプログラムにエラーが出ます

    hello.pl というファイルに print “hello”; と、書きました。 ターミナルに perl -cw hello.pl と、入力しました。 Unrecognized character \xE2; marked by <-- HERE after print <-- HERE near column 7 at hello.pl line 1. と、メッセージが出ました。 解決方法を教えて頂きたいです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • WindowsでPerlをする際,1行目の"#! ~"はどのように?

    Perlの参考書・本等ではプログラムファイルの第1行目は #! /usr/local/bin/perl という1行がよく有りますが,WindowsXPを用いている場合では,この1行をどう直せばよいのでしょうか? #! (perl.exeが存在するフォルダのパス) でよいのでしょうか? 私はWindowsXPを使っていて,この1行を使わずにプログラムを書いておりましたので,この1行の意味がよく分かりません。 ある参考書には,"#!はその行に書いたコマンドに,ファイルの残りの部分を渡して実行すると言う性質を持っている"と有りました。だから,試しにfile1.plとfile2.txtを準備し, file1.plの中身  #! (perlの存在するフォルダのパス)\perl.exe  while(<STDIN>){   print;  } file2.txtの中身  hello world として,コマンドプロンプトで file1.pl < file2.txt としたのですが正しく動作しませんでした.(perl file1.pl < file2.txt と入力した場合は正しく"hello world"となりました)

    • ベストアンサー
    • Perl
  • bad interpreter:エラーについて

    -bash: ./test.pl: usr/bin/perl: bad interpreter: というエラーについてです。 掲題のエラーが出てしまい、perlが動かないので困っています。 どうすればいいのか教えてもらえませんでしょうか。 【状況】 VMwareplayer3.1.2上で、CentOS5.5を動かし、デフォルトで入っているperlを使ったファイル「test.pl」を作っています。 test.plを実行しようとしているのですが、以下のエラーメッセージが表示されます。 -bash: ./test.pl: usr/bin/perl: bad interpreter: そのようなファイルやディレクトリはありません 実行した際のコマンドは./test.plです。 test.plの中身は以下。 ------------------------------------------------------ #!/usr/bin/perl use strict; use warnings; my $name = "morifuji"; print "Hello ". $name . "\n"; ------------------------------------------------------ 【確認済み事項】  test.plの置き場所は/usr/bin/perlです。  ls -lで権限をみたところ、rwxr-xr-x furukawa root 4096となっている。  perl test.plと命令するとエラーは返らずちゃんと表示されます。  (perlを省いて、test.plと命令するとエラーになる。これだと、webから表示されたときに動きません)  FTPとかで転送すると文字コードの問題でバグが出る、という風な記事を見かけたが、VMwarePlayerなのでそういったやりかたはしていない。  which perlと命令してperlの場所を探したが、 /usr/bin/ にある。

  • Perl からbashを呼び出したい

    Perlからbashのファイルを呼び出そうとしています。 sendmail2.cgiは、呼び出せていまが、 sendmail3.cgiは、呼び出せません。 bashのファイル自体は、./(bashファイル)とやると実行できます。 パーミッションは、 sendmail3.cgi 655 mail_plain.sh 755 sendmail2.cgi 705 mailsend.sh 705 です。 パスの設定の問題かとも思ったのですが、よくわかりません。 宜しくお願いします。 ===sendmail2.cgi============= #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<P>sendmail test</P>\n"; print "mailtest\n"; print "</HTML>\n"; exec('/home/httpd/wwwroot/yoshida/mailsend.sh'); exit(0); ============================== ===sendmail3.cgi============= #!/usr/bin/perl exec("/home/httpd/wwwroot/bbstest/mail_plain.bash"); exit(0); ==============================

    • ベストアンサー
    • Perl
  • perlのprint文がうまく動きません

    perlの勉強を始めました。 perlの本の最初に Hello.plというファイルに print”Hello!”;と記述して perl Hello.plとすると画面にHello!と表示されるとあるのですが、何も表示されません。 ファイルの記述をprint ”Hello!\n";としてやるとHello!と一応表示されるのですがなぜ改行が必要になるのかがよくわかりません。どのように理解すればいいのでしょうか?

  • Cygwin上でperlスクリプトの実行

    Cygwin上で、例えば「hello.pl」というperlスクリプトを 実行するのに $ perl hello.pl や $ ./hello.pl では実行できるのに $ hello.pl だと bash: hello.pl: command not found と なってしまって実行できません。 $ hello.pl でコマンド化して実行したいのですが どのようにすればよいか教えてください。

  • Perl require 共通の変数 外部ファイル

    ファイルが多くなってきて、その中でも共通の変数があるので 外部ファイルにまとめたい・・・ ~test.pl~ #!/usr/bin/perl require("testcommon.pl"); print qq(Content-type: text/html\n\n); print <<END; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=$CHARSET"> <title>外部CGIファイル読み込み</title> </head> <body> END print qq($test<br>$data<br>$NEW); print <<END; </body> </html> END exit; 1; ~testcommon.pl~ #!/usr/bin/perl $test = "テスト"; $data = "テストです"; $CHARSET = "UTF-8"; $NEW ="サーバー"; 1; まずこれが現在テスト中で サーバーAでは、これでいけているのですが、 サーバーBでは、これではいけず、 エラーログを見ると 「@INC~/usr/local/lib64/perl5~」 とでてます。これがどのような意味をささしているのかわからないです。 いつも1行目に書く「#!/usr/bin/perl」の部分を書き換えてみたのですが・・・ さらにサーバーBでは、ログファイルなど開く際、フルパスでないと開けません。 require("testcommon.pl");←これですと インターネットサーバーエラーとなってしまいます。 これはエラーログを見るとフルパスで指定と書いていたので、 require("/path/path/path/testcommon.pl"); のようにしました。 これで、一応表示はできたのですが、 testcommon.plで新しい変数を書き加えると、($NEW123 = "追加したい変数";) 表示されません。 またCHARSETでUTF-8を指定してますが、 更新や、再度ページに入ったりすると、 CHARSETの変数が反応していなかったりしています。ページでソースを確認すると 変数の部分が空欄になってます。 これは require("/path/path/path/testcommon.pl"); が読み込んでいなかったり読み込んでいたり もしくは、一度なにをしたのかわからないですが、このフルパスの場所に testcommon.plのファイルをおいて、そのときのままになっている など、原因、対処がわからず困っております。 ※というより結論としては、 共通の変数を1つのファイルでしようしたいということです。 ~common.pl~ $a = 123; $b = "テスト"; $c = 2; ~test1.pl~ $TEST = $a * $c; print "$b$TEST\n"; #結果「テスト246」 ~test2.pl~ $TEST123 = $a + $c; print "$TEST123$b; #結果「125テスト」 このような感じ・・・(+_+)

専門家に質問してみよう