電子書籍の厳選無料作品が豊富!

独学でmacでパールを勉強しています。
始めてからまだ1週間くらい。
教科書みながら、print命令でファイルハンドルに指示を出してるのですが、
書き込めはできるのですが、
ファイルが無い場合、
新規に自動でファイルが作成されるはずとの記載があったのですが、
何故か、自動でファイルが生成されません。
調べても、設定が必要等言われてますが、
mac自体も初心者でほとんどわかりません。

どのような設定にすればいいのでしょうか?
また、ソースに何か悪い所があるのでしょうか?
お助けください。

下記は実験用に作ったソースですが、
作動もしてるのですが、 
新規に自動でファイルが作成されるはず が
何故か作成されません。

ちなみに localhost上で動かしてます。

#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TITLE>test</TITLE></HEAD>\n";
print " <BODY>\n";

print "<H1>test</H1><HR>\n";

open ( FH ,">tukuruzo.txt");
print FH "tukuruzo";
close ( FH );


print "</BODY>\n";
print "</HTML>\n";
__END__

A 回答 (3件)

状況によって問題点が変わってくるのですが、ソースは別に悪くないと思います。



見たところ、シェバング行があったり、表示にHTMLを出力しているようですので、CGIとして動作させているのではないでしょうか。
ローカルマシン上で動作させる場合と、ブラウザを通してWebサーバ上で動作させるのには権限による違いがあります(例外もありますが)。
すべてではありませんがマカーの方は結論を急ぐあまり基礎を無視して事を進めるため過程における要因の切り分けができない方が多い(わたくしの身の回りに)ので、まずは落ち着いて参考にしている本をよく読みましょう。
PerlのプログラムをOS上で動作させる場合と、WebサーバからCGIを介して動作させる場合とではそのマシンに対するアクセス権限が異なることを理解してください。
PCのオーナーや管理者、あるいは利用者などはそのマシンに対するアクセス権限を持って利用しているため権限の範囲内でファイルを作ったりするのは自由です。
Webからアクセスするユーザが、そのマシンに好き勝手にファイルをガンガン作れるようなら、サーバはあっという間にパンクしてしまいます。
もし、Webからアクセスするユーザに対してファイルを作らせたいのならそこに権限を与えなければなりません。
逆に危険ではありますが、Webからのアクセス権限をオーナーと同じにするという荒業もありますが・・・。
MacだからとかWindowsだからとかで物事が単純になるわけではなく、それを開発した企業努力が基本技術を隠蔽しているだけで、パソコンといえど立派なコンピューターです。オーナーすなわちシステム管理者が本当はあたりまえのように理解しなければならないことが結構あったりするのです(使ってるときにコンセント抜いちゃいけないよーとか)。

違いを体感する、具体的な方法として、ブラウザからの動作確認を止めて、ターミナルソフトを動かし、コマンドでPerlからそのプログラムを実行させて結果を見るとよいでしょう。

まずはファイルの属性(権限:パーミッション)とオーナー/グループについて調べてください。
ファイルといっても通常のファイルだけでなく、Macや近年のWindowsでフォルダと呼ばれるようになった「ディレクトリファイル(通称ディレクトリ)」も同じです。
まあ、ファイルを扱うプログラミングを勉強するなら、のちのちはデバイスファイル(キャラクタ型・ブロック型)やリンクファイル(シンボリック・ハード)についても知っておく必要があると思います。

プログラミングの勉強は障害が最高の先生かと思いますのでめげずに取り組んでください。
    • good
    • 0
この回答へのお礼

ありがとうございます。まだまだ知識不足で、おっしゃっていただいていることが、(それでも、噛み砕いてわかりやすくお伝えいただいていると思うのですが、)あまり理解できないのですが、もっともっと知識を付けながら取り組みたいと思います。
まずは
「ファイルの属性(権限:パーミッション)とオーナー/グループについて調べてください。」とありましたので、その周辺からperlと同時並行で学んで行きたいと
思います。

ありがとうございました!

お礼日時:2011/02/09 16:10

問題は、スクリプトが置かれているフォルダのパーミッションだと思います。



CGIで動かしていそうですが、
ターミナルから実行した場合はどうでしょうか?

Perlのスクリプトが置いてあるフォルダのパーミッションを確認してください。
オーナー以外の書き込み不可になっていると思われます。
#777にすれば動作すると思います。

あとは、No1さんの言うとおり、エラー処理は入れておいたほうがいいと思います。
    • good
    • 0
この回答へのお礼

ターミナルのパーミッションを777に一度してみたのですが、それでも動きませんでした。
エラー処理は入れてみます。構成できましたら、再度亜がたいと思います。

そのときはまたご助言ください。

お礼日時:2011/02/09 16:12

open が成功しているかどうか調べないで大丈夫なの?

    • good
    • 0
この回答へのお礼

一度してみます。その後の動作確認で、動かなかった場合は、再度ご助言ください。

お礼日時:2011/02/09 16:13

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