独学で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__
No.3ベストアンサー
- 回答日時:
状況によって問題点が変わってくるのですが、ソースは別に悪くないと思います。
見たところ、シェバング行があったり、表示にHTMLを出力しているようですので、CGIとして動作させているのではないでしょうか。
ローカルマシン上で動作させる場合と、ブラウザを通してWebサーバ上で動作させるのには権限による違いがあります(例外もありますが)。
すべてではありませんがマカーの方は結論を急ぐあまり基礎を無視して事を進めるため過程における要因の切り分けができない方が多い(わたくしの身の回りに)ので、まずは落ち着いて参考にしている本をよく読みましょう。
PerlのプログラムをOS上で動作させる場合と、WebサーバからCGIを介して動作させる場合とではそのマシンに対するアクセス権限が異なることを理解してください。
PCのオーナーや管理者、あるいは利用者などはそのマシンに対するアクセス権限を持って利用しているため権限の範囲内でファイルを作ったりするのは自由です。
Webからアクセスするユーザが、そのマシンに好き勝手にファイルをガンガン作れるようなら、サーバはあっという間にパンクしてしまいます。
もし、Webからアクセスするユーザに対してファイルを作らせたいのならそこに権限を与えなければなりません。
逆に危険ではありますが、Webからのアクセス権限をオーナーと同じにするという荒業もありますが・・・。
MacだからとかWindowsだからとかで物事が単純になるわけではなく、それを開発した企業努力が基本技術を隠蔽しているだけで、パソコンといえど立派なコンピューターです。オーナーすなわちシステム管理者が本当はあたりまえのように理解しなければならないことが結構あったりするのです(使ってるときにコンセント抜いちゃいけないよーとか)。
違いを体感する、具体的な方法として、ブラウザからの動作確認を止めて、ターミナルソフトを動かし、コマンドでPerlからそのプログラムを実行させて結果を見るとよいでしょう。
まずはファイルの属性(権限:パーミッション)とオーナー/グループについて調べてください。
ファイルといっても通常のファイルだけでなく、Macや近年のWindowsでフォルダと呼ばれるようになった「ディレクトリファイル(通称ディレクトリ)」も同じです。
まあ、ファイルを扱うプログラミングを勉強するなら、のちのちはデバイスファイル(キャラクタ型・ブロック型)やリンクファイル(シンボリック・ハード)についても知っておく必要があると思います。
プログラミングの勉強は障害が最高の先生かと思いますのでめげずに取り組んでください。
ありがとうございます。まだまだ知識不足で、おっしゃっていただいていることが、(それでも、噛み砕いてわかりやすくお伝えいただいていると思うのですが、)あまり理解できないのですが、もっともっと知識を付けながら取り組みたいと思います。
まずは
「ファイルの属性(権限:パーミッション)とオーナー/グループについて調べてください。」とありましたので、その周辺からperlと同時並行で学んで行きたいと
思います。
ありがとうございました!
No.2
- 回答日時:
問題は、スクリプトが置かれているフォルダのパーミッションだと思います。
CGIで動かしていそうですが、
ターミナルから実行した場合はどうでしょうか?
Perlのスクリプトが置いてあるフォルダのパーミッションを確認してください。
オーナー以外の書き込み不可になっていると思われます。
#777にすれば動作すると思います。
あとは、No1さんの言うとおり、エラー処理は入れておいたほうがいいと思います。
ターミナルのパーミッションを777に一度してみたのですが、それでも動きませんでした。
エラー処理は入れてみます。構成できましたら、再度亜がたいと思います。
そのときはまたご助言ください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- HTML・CSS (Javascript)印刷するファイルに応じて印刷プレビュー画面で用紙を自動的に切り替えたい!! 2 2022/04/11 12:04
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlのflock関数でロックをかけ...
-
perlのrequireの動き方について...
-
perl 正規表現でエラー
-
perl LWPでURLにアクセスした時...
-
PerlでUTF-8のファイルの文字列...
-
perl 初等プログラミングについて
-
AI sisterとは、偽物の人ですか?
-
Perlで時間の計算
-
perlの構文でカンマの意味が分...
-
テキストファイルで提出とは?
-
arduino の割り込み処理について
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
perlについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fopenでディレクトリ内の全ファ...
-
ファイルロックの解除方法
-
TSVファイルを読み込んでCSV形...
-
[perl] perlで書き込み中に、PC...
-
Cookieが保存できない。
-
perlをデスクトップのショート...
-
最新のファイルのみ検索
-
flockについて
-
unixでのファイルロックの方法...
-
ファイルの結合
-
perlでCSV形式ファイルのア...
-
CGI のモジュールをつかってフ...
-
ファイルがオープンできない
-
HTMLの中にCGIファイルリンク
-
file_exists関数について
-
1行がやたら長いテキストをバッ...
-
ファイル名の切捨てとリンクの...
-
perl の printでのファイルへの...
-
Perl 処理速度について
-
ファイルの存在確認をしたい
おすすめ情報