Perlを学んでいます。
他人の作ったプログラムに、下記のようなものがあります。
それを読解しようと試みていて、大筋は理解できたと思うのですが、
細かいところで、『これは何?』とつまづいてしまいました。
もしどなたか分かる方がいらっしゃいましたら、暇な時で結構です。
未熟者の私に教えて頂けないでしょうか。どうかよろしくお願いします。

??な個所

 ・9~15行目の意味:おそらくファイル名の”やスペース等を外しているの
            かなと思うのですが・・・
 ・17~20行目:ここに記述した部分の前後どこにも$ctypeの定義はないので
         すが、$ctypeにはなにが入っているのですか?
 ・28~36行目:いきなり出てきた($fname,$ext2) = split(/\./,$fname);
         の$ext2はなんなのでしょうか?拡張子らしい感じはするの
         ですが、この35行目でどうして$ext2が拡張子として定義で
         きるのでしょうか。

非常に量の多い質問でごめんなさい。答えられるときに答えられる部分のみで結構です。よろしくお願いします!!

http://www.geocities.co.jp/HeartLand-Cosmos/4223 …

このQ&Aに関連する最新のQ&A

A 回答 (1件)

perl は、あんまり詳しくないのですが、分かる範囲で。



>・9~15行目の意味:おそらくファイル名の”やスペース等を外しているのかなと思うのですが・・・

そうですね。9行目は、「ブランク(タブやスペース)filename="(ダブルクォート以外の文字の羅列)" の
ダブルクォート以外の文字の羅列(ファイル名と思われる文字列)を filename に代入しています。

10行目は、ファイル名がダブルクォートで括られていなかったときのためにある処理です。

14,15行目は、同様に name=なんとか ってところから、イコールの右側を切り出して
name に代入しようとしています。

>・17~20行目:ここに記述した部分の前後どこにも$ctypeの定義はないので
> すが、$ctypeにはなにが入っているのですか?

17行目で ctype に代入をしていますね。「Content-type: なんとか」のなんとかの
部分を切り出して ctype に代入しようとしています。

>・28~36行目:いきなり出てきた($fname,$ext2) = split(/\./,$fname);
>の$ext2はなんなのでしょうか?拡張子らしい感じはするの
>ですが、この35行目でどうして$ext2が拡張子として定義で
>きるのでしょうか。

fname はファイル名だとすると、拡張子の前にピリオドがあると想像できます。
split() は、最後の "." の左と右のふたつに分割して、一気に fname と ext2 に
代入します(正確な用語を知りません)。

# こんな説明で、お役に立てますか?
# perl は知りませんが、いっぱしの計算機屋です
    • good
    • 0
この回答へのお礼

>10行目は、ファイル名がダブルクォートで括られていなかったときのために
>ある処理です。
>fname はファイル名だとすると、拡張子の前にピリオドがあると想像
>できます。
>split() は、最後の "." の左と右のふたつに分割して、一気に
>fname と ext2 に代入します

なるほど、この辺がかなり??だったのですが、よく分かりました。

>17行目で ctype に代入をしていますね。「Content-type: なんとか」
>のなんとかの 部分を切り出して ctype に代入しようとしています。

う~ん、ここはファイルのタイプをその記述で取得できるってことなの
でしょうね~。(かな?)
かなり前進致しました。いつもいつも感謝致します!
ありがとう、a-kumaさん!!

お礼日時:2001/07/18 20:49

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

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

Qhttp://***.cgi?key=$keyの部分について

<a href='***.cgi?key=$key'>リンク</A>

とすると、

http://**.cgi?key=*****
というリンクがアドレスバーに表示されて、次のページへ進みますよね。

この、cgiの後の部分(?key=****)を表示しない方法というのはありますか?
POSTでやれば表示されませんが、ボタンばっかりだとすっきりしないので…。

Perlでかいています。

Aベストアンサー

ボタンだとすっきりしないというのが見た目の問題ならば、スタイルシートでボタンをテキストリンク風な表示にすることもできますが、それでは不都合があるでしょうか?
なお、どのようなCGIかはわかりませんが、getで問題ない部分はgetにしておいた方が直接urlを表記したい場合に使い勝手がいい場合もあります。
(例えばgoogleの検索がpostだったら、かなり使い勝手が悪くなりますね。)

Qhttp://tydsu.com/oeder と後ろに拡張しなしに表示させるには

時々大手サイトなどでhttp://tydsu.com/oeder と後ろにHtmlやCgiなどの拡張子がついていない場合があります。

あれはどのようにして表示しているのでしょうか?表方法のご存知の方がいましたら教えてください。

よろしくお願いいたします。

Aベストアンサー

一言で書くと「Webサーバーの設定」の問題です。

Webサーバーで「ファイルが指定されなければ○○を表示しなさい」と設定すれば、このようにファイル名を指定しない場合に特定のファイルを表示する事でできます。
(逆に、何も設定しなければ、ディレクトリ内のファイルの一覧が表示されたり、エラーメッセージが表示されたりします。)

この特定のファイル名は”一般的に”index.htmlやindex.cgiとする事が多いですが、他のファイル名も設定できます。
ですので、http://hatena.ne.jp/order=http://hatena.ne.jp/order/index.htmlとは限りません。
(画像が表示されていないトコロを見ると、実際index.htmlではないのかも?)

Aベストアンサー

>画像ヘッダとはどういうものでしょうか?

Content-type: image/gif
Content-type: image/png
Content-type: image/jpeg

など、画像タイプごとに決まっています。
<img>タグに普通の画像ファイルが指定されている場合は
Webサーバが画像ファイルの拡張子から判断して返してくれ
ますが、CGIから返されるデータの種類は拡張子からは判断
できないのでCGI内部からヘッダを返す必要があります。


●CGIがPerlの場合で、GIF画像をCGIから返す例
#!/path/to/perl
print "Content-type: image/gif\n\n";
open(GIF, "file.gif");
binmode(GIF); binmode(STDOUT);
print <GIF>; close(GIF);

もちろん、CGIからは画像フォーマットを返せばいいので、
ファイルから読まずにあらかじめCGIソース内に画像データ
を持っておいて出力する方法も可能です。


ちなみに、多くのCGIではHTMLコンテンツを返す場合が多い
ので、ヘッダは以下のようになります。

print "Content-type: text/html\n\n";

>画像ヘッダとはどういうものでしょうか?

Content-type: image/gif
Content-type: image/png
Content-type: image/jpeg

など、画像タイプごとに決まっています。
<img>タグに普通の画像ファイルが指定されている場合は
Webサーバが画像ファイルの拡張子から判断して返してくれ
ますが、CGIから返されるデータの種類は拡張子からは判断
できないのでCGI内部からヘッダを返す必要があります。


●CGIがPerlの場合で、GIF画像をCGIから返す例
#!/path/to/perl
print "Content-type: image/gif\n\n...
続きを読む

Q${str}と$strの違いとは?

スカラー変数の${str}と$strの違いとは何なのでしょうか。

スカラー変数における{}の意味がよくわかりません。
別になくても処理は変わらない気がしますが、
どういった際に{}は使用するのでしょうか?

Aベストアンサー

もしPerlでのことでしたら、スカラー変数名を{}で囲むのは、それ以降に半角文字が続く場合に、そのスカラー変数名と半角文字の文字列との境界を明示するためだと思います。 変数自体に何かの違いがあるということではないはずです。

たとえば、処理の中でスカラー変数$strに続けてstrという文字を書き出したい場合、「$strstr」と記述すると、[$str]とは別の[$strstr]という名前のスカラー変数と認識されてしまいます。 これを避けるために、スカラー変数名を{}で囲って、「${str}str」と記述することで、$strというスカラー変数に、strという文字が続いていると認識させる、という具合だと思います。

見当違いでしたらごめんなさい。

Q$a++と++$aの違いがよくわかりません。

わかりやすい、いい例ってありますか?

Aベストアンサー

PHPだけど、(Perl)はここ数年さわっていないけど同じかな。
$a = 10;
++$a;
print($a); ← aは11
じつはこの場合は、$a++;でも同じ。

$b = 10;
$c = $b++;
print($b, $c);

$b は11,$cは10。$cが++$bなら11。
さてなんででしょう?

$c = $b++;

1.$cに$bを代入する。なので、$bと同じ値が入る。
2.その後,$bに++(1)を足す。

$c = ++$b
だと、
1.$bに++(1)を足す。のが最初。
2.その後,$cに$bを代入する。

式が評価される順番が少し違うだけ。
間違ってないと思うけど、いろいろ実験してみて。


このカテゴリの人気Q&Aランキング

おすすめ情報