• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perl の printでのファイルへの指示で)

Perlでファイルへの指示がうまく動作しない理由と解決方法

このQ&Aのポイント
  • Perlのprint命令でファイルハンドルに指示を出す際、ファイルが存在しない場合に自動で作成されるはずですが、うまく動作しないことがあります。
  • 原因は設定によるものですが、解決するためにはいくつかの方法があります。
  • まず、ファイルのパスを指定する際には、絶対パスまたは相対パスを正しく指定する必要があります。また、ファイルの属性やパーミッションの設定も確認してください。さらに、ファイルシステムの容量や制限も考慮する必要があります。

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

  • ベストアンサー
  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.3

状況によって問題点が変わってくるのですが、ソースは別に悪くないと思います。 見たところ、シェバング行があったり、表示にHTMLを出力しているようですので、CGIとして動作させているのではないでしょうか。 ローカルマシン上で動作させる場合と、ブラウザを通してWebサーバ上で動作させるのには権限による違いがあります(例外もありますが)。 すべてではありませんがマカーの方は結論を急ぐあまり基礎を無視して事を進めるため過程における要因の切り分けができない方が多い(わたくしの身の回りに)ので、まずは落ち着いて参考にしている本をよく読みましょう。 PerlのプログラムをOS上で動作させる場合と、WebサーバからCGIを介して動作させる場合とではそのマシンに対するアクセス権限が異なることを理解してください。 PCのオーナーや管理者、あるいは利用者などはそのマシンに対するアクセス権限を持って利用しているため権限の範囲内でファイルを作ったりするのは自由です。 Webからアクセスするユーザが、そのマシンに好き勝手にファイルをガンガン作れるようなら、サーバはあっという間にパンクしてしまいます。 もし、Webからアクセスするユーザに対してファイルを作らせたいのならそこに権限を与えなければなりません。 逆に危険ではありますが、Webからのアクセス権限をオーナーと同じにするという荒業もありますが・・・。 MacだからとかWindowsだからとかで物事が単純になるわけではなく、それを開発した企業努力が基本技術を隠蔽しているだけで、パソコンといえど立派なコンピューターです。オーナーすなわちシステム管理者が本当はあたりまえのように理解しなければならないことが結構あったりするのです(使ってるときにコンセント抜いちゃいけないよーとか)。 違いを体感する、具体的な方法として、ブラウザからの動作確認を止めて、ターミナルソフトを動かし、コマンドでPerlからそのプログラムを実行させて結果を見るとよいでしょう。 まずはファイルの属性(権限:パーミッション)とオーナー/グループについて調べてください。 ファイルといっても通常のファイルだけでなく、Macや近年のWindowsでフォルダと呼ばれるようになった「ディレクトリファイル(通称ディレクトリ)」も同じです。 まあ、ファイルを扱うプログラミングを勉強するなら、のちのちはデバイスファイル(キャラクタ型・ブロック型)やリンクファイル(シンボリック・ハード)についても知っておく必要があると思います。 プログラミングの勉強は障害が最高の先生かと思いますのでめげずに取り組んでください。

dummyplugineva
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • diszo
  • ベストアンサー率78% (32/41)
回答No.2

問題は、スクリプトが置かれているフォルダのパーミッションだと思います。 CGIで動かしていそうですが、 ターミナルから実行した場合はどうでしょうか? Perlのスクリプトが置いてあるフォルダのパーミッションを確認してください。 オーナー以外の書き込み不可になっていると思われます。 #777にすれば動作すると思います。 あとは、No1さんの言うとおり、エラー処理は入れておいたほうがいいと思います。

dummyplugineva
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

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

dummyplugineva
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A