トップページ⇒php
995コメント334KB

CGIとかPerlとか超初心者なんだけど、

■ このスレッドは過去ログ倉庫に格納されています
0001埼玉板"管理人"2001/07/20(金) 17:36ID:???
てか何もわかってない厨房なんだけど、掲示板を自鯖へ移転する必要性
が非常に高くなってきたのです。
http://green.jbbs.net/travel/511/saitama.html

ス連でも相談にのってもらってるんだけど、ここでも相談したい。
とりあえずFTPって何?どういうふうに使うの?
0756nobodyさん05/03/16 07:13:39ID:???
>>754
ヒント
 パーミッション
 拡張子
 .htaccess

そもそも処理がまずいとかじゃなくて
他人に改変されたのは確定してるの?
075775205/03/16 07:22:07ID:PjHc8SkF
すみません表示はされましたが、$mente = 1; とやっても
「ただいまメンテナンス中です。しばらくお待ち下さい。」とは表示されず
通常通り表示されてしまいます。なぜでしょうか?
0758nobodyさん05/03/16 07:24:13ID:???
>>757
errorサブルーチンの中でexitしてる?
0759nobodyさん05/03/16 07:53:03ID:???
>>757
主要部分全部晒せ
076075205/03/16 08:05:08ID:PjHc8SkF
#メンテ
if ($mentetyu == 1) {
&error("$mentenotoki");exit;
}
#エラー表示
sub error {
local( $error_msg ) = @_;

print << "_error_";
Content-type: text/html

<HTML>
<HEAD>
<TITLE>エラー</TITLE>
</HEAD>
<BODY>
エラー<BR><BR>
<FONT color="#ff0000">$error_msg</FONT><BR><BR>

</BODY>
</HTML>
_error_
}
}
0761nobodyさん05/03/16 11:56:19ID:???
突っ込みどこ満載だな
076275205/03/16 20:39:28ID:+pS7MC6I
突っ込んでもらえませんか?
0763nobodyさん05/03/16 20:52:02ID:???
>>752
別の観点から突っ込んでみる

チェックの結果は以下のとおりです。
HTML4.01 Transitional としてチェックしました。
7個のエラーがありました。このHTMLは 29点です。タグが 6種類 9組使われています。


先頭の数字はエラーのおおまかな重要度を 0〜9 で示しています(減点数ではありません)。少ない数字は軽く、9 になるほど致命的です。0 は減点対象外のごく軽度のエラーで (グレイのかっこつき) でメッセージされています。

8: line 1: 最初の記述が DOCTYPE宣言ではありません。 → 解説 2
2: line 1: <HTML> には LANG 属性を指定するようにしましょう。 → 解説 118
9: line 3: <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="〜"> で CHARSET が指定されるより前に非ASCII文字が含まれています。 → 解説 130
0: line 4: (<HEAD>〜</HEAD> 内に <LINK REV="MADE" HREF="mailto:〜"> が含まれていません。) → 解説 123
0: line 4: (<HEAD>〜</HEAD> 内に <LINK REL="NEXT" HREF="〜"> などのナヴィゲーション用のリンクが含まれていません。) → 解説 124
4: line 4: <HEAD>〜</HEAD> 内に <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="〜"> が含まれていません。 → 解説 127
0: line 7: (<FONT> はあまり薦められないタグです。スタイルシートを使いましょう。) → 解説 57
0764nobodyさん05/03/16 21:20:03ID:???
lint厨ウゼー('A`)
0765nobodyさん05/03/18 12:36:03ID:cZIF3PFS
サブルーチンの引数について質問です、
use CGI;
my $query = new CGI;
upload_picture($query);

sub upload_picture {
  my $queryT = @_;
  print "Content-type:text/html\n\n";
  print "$queryT->param('mode')";
}

これはうまくいかない例ですが、このように$queryを引数として渡す方法をが知りたいです。
C++のポインタや参照渡しなどについては理解しているのですがperlについてはまだよくわかりません。
upload_picture($query);

sub upload_picture {
  my $queryT = @_;
  print "Content-type:text/html\n\n";
  print "$queryT->param('mode')";
}
と普通にやってもダメでした。先日配列を送る場合は
function(\@arg);
sub function {
  my $arg = @_;
  $copy = @$arg[10];
}
でうまく行くことがわかったのですが、これをうまく応用するのでしょうか? よろしくお願いします。
0766nobodyさん05/03/18 13:49:08ID:???
>>765
問題点はそこじゃないんだなぁ、これが・・・
print "$queryT->param('mode')";
のダブルクォーテーション取ってみそ
0767nobodyさん05/03/18 13:59:47ID:???
>>765
それから、そのソースへの個人的な突っ込みをいくつか。
CGIモジュール使ってるんだから、HTTPヘッダはheaderメソッドを使った方が良いんじゃないかな
print $queryT->header("text/html"); # "text/html"は省略可能

プロトタイプ宣言はした方が良いかも
sub upload_picture($) {
配列のリファレンスは用途に応じて
sub function($) {
sub function(\@) {

引数の取り方・・・これは好みだろうけど自分はこのパターンを愛用
my $queryT = shift;
こんなあり方もあるよ、ということで
0768765 質問者05/03/18 18:10:23ID:cZIF3PFS
>>766-767
>>766の修正を行ってみましたが、何も出力されない状態で変わりませんでした、
しかし加えて、補足通りに引数の取り方を@_;からshift;に変えてみたら無事表示が成功しました。
headerを使う件も参考になります。ご回答どうもありがとうございました。感謝感謝
0769nobodyさん2005/03/21(月) 21:47:59ID:pYFXL8q9
perlでボタンを押すたびに数字が1プラスされるスクリプトを作りたいのですが
わかりません。for文を使うのでしょうか?教えてください。お願いします。
0770nobodyさん2005/03/21(月) 23:33:14ID:m2fA6Rja
今度、HP作ることになったのですが、送信メールをだすボタンのCGIでsendmailが使えないとサーバから通達がありました。どうすればよいでしょうか?
0771nobodyさん2005/03/21(月) 23:36:46ID:pYFXL8q9
>>770
sendmailの使える鯖を探す
0772nobodyさん2005/03/23(水) 00:52:14ID:e/6k49GG
配列@sample=($s1, $s2, $s3);
に入ったすべてのスカラー変数の特定の文字を
置換したいんですがどうすれば良いのでしょうか?
置換演算子とかforeach文とかいじっているうちにわかんなくなった…
07737722005/03/23(水) 10:56:29ID:???
あースマソ、自分で解決しました。
0774nobodyさん2005/03/23(水) 23:05:09ID:nRCptuRw
dbmopenについて御教授ください。

ローカルのテスト環境(WindowsXP+Apache+ActivePerl5.6)で作成&テストした
CGIを、レンタルサーバー(Linux+Apache+ActivePerl5.6)にアップロードして
実行しています。

ローカルのテスト環境(WindowsXP+Apache)では、以下の構文で何の問題もなく
動作するのですが、

dbmopen(%TEST, 'test', 0644) or die "cannot open test: $!";

これをサーバ上で実行すると、この行で

cannot open bike_satus: Permission denied at ・・・

というエラーが発生して止まります。ローカル、サーバーとも
cgi-binディレクトリ(パーミション705)に置いています。
同じ条件で、普通のテキストファイルのopenでは何の問題も
ありません。

なにかパーミションの設定が悪いのでしょうか?・・・
0775nobodyさん2005/03/23(水) 23:08:53ID:???
あ、>>774のエラーメッセージは、

cannot open test: Permission denied at ・・・

の間違いです。
0776質問者2005/03/24(木) 11:15:54ID:ZhBBGS6u
質問です、ハッシュ変数の配列でpushが使えません、一体どうすればよいのでしょうか?
perlのメモリー構造がどうなっているのかよくわかりません、どなたか教えていただけませんでしょうか?

print "Content-type:text/html\n\n";
print "処理を開始します<BR>";

@data,%add_data;
$data_count = 0;

$add_data{'name'} = "takesi";
$add_data{'value'} = 90;
push @data,%add_data;
$data_count ++;

$add_data{'name'} = "sayoko";
$add_data{'value'} = 95;
push @data,%add_data;
$data_count ++;

for($index=0;$index < $data_count;$index++)
{
print "$data{'name'}[$index] さんは $data{'value'}[$index] 点<BR>";
}
print "以上<BR>";
exit;
0777nobodyさん2005/03/24(木) 11:22:40ID:???
大きな勘違いをしています
0778質問者2005/03/24(木) 12:05:09ID:ZhBBGS6u
さっぱりわからんです(´・ω・`)

$data_count_check = $#data;
print "$data_count_check 件のデータが入ってるみたい<BR>";

とデータ入力後に置くと7件というめちゃくちゃな数字が出ます。
0779質問者2005/03/24(木) 12:25:12ID:ZhBBGS6u
print "Content-type:text/html\n\n";
print "処理を開始します<BR>";

$data;
%add_data;
$data_count = 0;

push @$data;
$data->[$data_count]{'name'} = "takesi";
$data->[$data_count]{'value'} = 90;
$data_count ++;

push @$data;
$data->[$data_count]{'name'} = "kenta";
$data->[$data_count]{'value'} = 80;
$data_count ++;

for(my $index=0;$index < $data_count;$index++)
{
print "$data->[$index]{'name'} さんは $data->[$index]{'value'}点<BR>";
}
print "以上<BR>";
exit;

これで何とかいけそうです。
0780nobodyさん2005/03/24(木) 12:42:38ID:???
本人が良きゃそれでいいんじゃね?
0781質問者2005/03/24(木) 15:34:01ID:Ss083ZYQ
なんとか標準的な方法を教えてください。
0782nobodyさん2005/03/24(木) 20:16:55ID:???
はじめまして。よろしくです。

PerlでCGI書いて,会員制なので,
ユーザー情報を収めた user.cgi(仮)とプログラム自体の
index.cgi(仮)があったとします。
管理者パスはindex.cgiに,ユーザー情報はuser.cgiに入ってます。

ここでです。PHPなどのincludeを使って
このCGIファイルを他のユーザーが閲覧できるんです。

これはPerlはコンパイルできないのでしょうがないのですが
何とかソースを保護する方法はないでしょうか?

よろしくお願いいたします。
0783nobodyさん2005/03/25(金) 00:58:32ID:???
>>781
まずは連想配列から勉強しなおした方が良いよ
0784nobodyさん2005/03/25(金) 00:59:40ID:???
>>782
普通に開けば
0785質問者2005/03/25(金) 01:09:24ID:Go+cArs/
>>783
perlで変数のメモリー確保がどのような形になっているのかさっぱりわかりません。
そのへんに詳しい解説とかどこかにありませんでしょうか?
それとも連想配列を構造体のように使うこの意図自体が間違っているのでしょうか?

具体的なご回答に期待します。
0786nobodyさん2005/03/25(金) 03:02:59ID:???
>>784
いえ,閲覧出来てしまうので,出来ないように
ソースの保護を行いたいのです。

普通に開けばではなく,開けないように(開いても判らない様に)したいのです。

何かいい方法はないでしょうか。
0787nobodyさん2005/03/25(金) 04:28:08ID:???
>>776
どういうデータ構造を作りたいのかが分からないです
こういう事がしたいのですか?

my %add_data;
$add_data{'takeshi'} = 90;
$add_data{'sayuko'} = 95;
for my $key( keys %add_data ) {
 print "$keyさんは、$add_data{$key}点\n";
}

どちらにしても
push @data,%add_data
と配列にハッシュ配列をpushしても配列としてセットされるだけです
0788nobodyさん2005/03/25(金) 04:30:34ID:???
>>782
パーミッションの問題ではないのですか?
0789nobodyさん2005/03/25(金) 07:35:11ID:???
>>782
いまどきsuEXECじゃないCGIはありえない
読まれたくなきゃ600にすればいい
0790nobodyさん2005/03/25(金) 11:19:57ID:???
>>788-789
ありがとうございました。
SuEXECが有効でしたので
パーミッション,700/600の構成で問題ありませんでした。
他ユーザーからの閲覧問題も解決しました。

ありがとうございました。(深々礼
0791nobodyさん2005/03/25(金) 12:11:35ID:???
safe modeじゃないPHPも共有サーバじゃありえない
0792nobodyさん2005/03/25(金) 13:22:20ID:???
画像アプローダで、アップロード直前に確認フォームを設けて、
利用者に確認をさせたいと考えています。
利用者のローカルの画像ファイルにリンクを張れば、画像を見て確認できるわけです。

<FORM>に enctype を指定しなければ、ローカルのファイル名をフルパスで取得できるので、
上記のことが可能になりますが、アップロードには、enctypeをマルチパートにしなければならず、
そうすると、取得できるファイル名はフルパスではなくなってしまいます。

アップロードするファイルのファイル名をローカルでのフルパスで取得して、
なおかつアップロードも可能にするにはどうしたら良いでしょうか。

よろしくお願いします。
0793nobodyさん2005/03/25(金) 13:22:53ID:???
>>791
しかし逆に、PHPのファイルがCGIから見えてしまうのは、
サーバ管理者にとっても頭の痛い問題だったりする罠
0794nobodyさん2005/03/26(土) 03:43:25ID:???
>>792
<form onsubmit="this.filename.value = this.file.value;">
<input type="file">
<input type="hidden" name="filename">
</form>
0795nobodyさん2005/03/26(土) 03:45:45ID:???
ちょっとミスった。
<input type="file">
     ↓
<input type="file" name="file">
0796nobodyさん2005/03/26(土) 04:08:30ID:???
multipartでも普通にフルパス取得できるんだけど、
もしかしてJavaScriptじゃないのか?
<form action="./hoge.cgi" method="POST" enctype="multipart/form-data">
<input type="file" name="File">
<span onclick="alert(File.value)">Click!</span>
</form>

どちらにせよ、サーバーサイドの話じゃないねぇ。
0797nobodyさん2005/03/26(土) 16:32:06ID:VlHyTFWS
$code = 15;
$file_name = 'DT' . $code;

のプログラムで、
$file_nameに'DT00015'と、常に桁数を固定して表示するにはどう改造すればよいのでしょうか?
0798nobodyさん2005/03/26(土) 16:45:49ID:???
>797
printfとかsprintfとか
0799nobodyさん2005/03/26(土) 17:06:13ID:???
substr
0800nobodyさん2005/03/26(土) 18:47:49ID:???
>>794
ありがとうございます。
cgi-lib.pl の ReadParse を使って、$in{ 'filename' } で取得できました。

>>796
Content-Disposition: form-data; name="xx"; filename="yy" ...

からファイル名を取得しています。やっぱりフルパスじゃありません。
AN HTTP 1.42nです。
調べるところを間違っているのでしょうか。
0801nobodyさん2005/03/26(土) 19:23:28ID:???
>>800
&ReadParse();

$incfn{ 'filename' }で取得できると思う。
0802質問です2005/03/26(土) 23:03:11ID:AXONbNE8
my $name;
$name->[0] = 'taro';
$name->[1] = 'hanako';
$name->[2] = 'goro';

perlでは、このような構文も使えるとのことですが、
この際$nameの参照先に出来ている配列の要素数(この際は3)を取得するにはどうすればよいのでしょうか?
0803nobodyさん2005/03/27(日) 07:16:23ID:???
$hoge = @{$name};
print $hoge;
print scalar @{$name};
print $#{$name}+1;
0804nobodyさん2005/03/27(日) 12:01:11ID:8QCcZUg+
>>803
ありがとうございます、参考になりましたです。
0805nobodyさん2005/03/28(月) 13:02:16ID:72+Tp0MM
CGIの制作依頼をしたいんですが、どこかお薦めサイトありますか?
制作スレなんてないですよね…

・ユーザー登録/ポイント加算システム
・個人HPでの使用
・〜5000円が理想。。。
0806教えてください2005/03/28(月) 13:04:39ID:ItuQ/jVL
PHP5とMysql4.1をインストールしました。 参考本を見ながら、そのとおりに、変更するところも全て変更したんですけど、それらを有効にするために、Apacheを再起動したところ、エラーが出ます。
PHP startup: Unable to load dynamic library 'C:\Program Files\Apache Group\PHP5\ext\php_mysql.dll'-指定されたプロシージャが見つかりません。
しかし、extの中には、ちゃんとphp_mysql.dllが入っており、またphp.iniのextension もコメントアウトしてあります。
どうしてこうなるのでしょうか?  解決策がありましたら、
教えてください。 
0807nobodyさん2005/03/28(月) 13:26:07ID:???
>>806
libmysql.dllをシステムフォルダにコピ
0808教えてください2005/03/28(月) 15:52:03ID:ItuQ/jVL
それもすでにコピーしてあるのに、同じエラーがまた。はぁぁ。最悪。
0809nobodyさん2005/03/28(月) 21:46:29ID:F9v4pFxQ
さっきまで、掲示板がちゃんと表示されていたのに、アップロードをし直したら、表示されなく(404エラー)なってしまいました。

FFFTPを使っていて、ソースを大幅に変更したのでミラーリングアップロードをしました。
アップロード前にBBSのフォルダに関しては、一切いじってません。アップロード後は、パーミッションの変更もしました。
分かるかた教えて下さい。

CGIはapeboardで借りました。
0810nobodyさん2005/03/28(月) 22:30:49ID:pdCFhomv
>>809
500エラーじゃなく、404エラー?
0811nobodyさん2005/03/29(火) 04:42:21ID:???
セミコロンとか括弧だろ
0812教えてチャン皇紀2665/04/01(金) 03:45:05ID:FwLlfb5g
すいません、どこできいたらもわからず、スレ違いかもしれませんが・・・
SSIの#includeで、
 ‘A.html‘ というファイルに外部ファイル ’B.html‘ を取り込んだ場合、
生成されるソースを見ると'A'の<body>内に 
‘B‘の<head>と<body>タグがそのまま記述されてしまうのですが、よいのでしょうか?

SSIの実行結果として、そうなって正解と思うのですが
HTMLの文法的にはひとつのHTMLファイルに<head>と<body>タグが2つあるのは
なんかまずい気がするのですが・・・

プログラミングのこととかよく理解できていない初心者ですので
すごくおバカな質問なのですが、どなたかご教授ください。

0813教えてチャン皇紀2665/04/01(金) 03:46:41ID:FwLlfb5g
あ、ちなみに表示自体は問題ないようなのですが
ソースをみてなんかまずい気がして気になって眠れないんです。。スイマセン
0814nobodyさん皇紀2665/04/01(金) 05:40:35ID:???
>>813
そりゃまずいけど…
私には、何故インクルードされるB.htmlにbodyタグなどが含まれているのか気になって眠れそうに無いよ

…プログラミングとは関係無いな。
こう言う質問は何処だろう?Web制作あたり?
0815教えてチャン皇紀2665/04/01(金) 13:54:46ID:FwLlfb5g
>>814
あぁ、やっぱりまずいんですねorz
b.htmlのソースがまるっぽAのファイルにとりこまれるんですよね。

でも、headとかbodyタグをはずすと、
Bがhtmlとして成り立たなくなるためか、
SSIで取り込んだら、‘B‘の部分は表示されなくなります。

SSIがらみなんで、こちらの板かと思ったのですが・・・
Web制作のほうで質問した方がよいのでしょうか?
javascriptやcgiのスレはあるようなんですが、
いったいどこへいけば良いのでしょう・・・・あぅ・・・

不眠仲間をつくってしまって申し訳ないですorz

0816nobodyさん2005/04/04(月) 01:40:07ID:???
if($a>10){
print "10超";
}
else{
print "10以下";
}
print "<br>$a";

これ、変数を
$a=10.0000000000001
とするまでは普通なんだけど、
$a=10.00000000000001
にすると、小数点以下がカットされ、さらに、
$a=10.0000000000000001
に至っては、10以下に判定されます。
別に必要としてるわけじゃないんだけど、ご存知の方いる?
0817nobodyさん2005/04/04(月) 08:28:59ID:???
>>816
浮動小数点の有効桁数には限界があります(一般的に15桁)
0818nobodyさん2005/04/04(月) 16:05:32ID:mRAkpYb7
質問。

初心者でもわかりやすいCGIの本ってありまつか?
0819nobodyさん2005/04/04(月) 16:12:48ID:???
【Perl,CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/
0820nobodyさん2005/04/04(月) 16:50:48ID:???
>>818
http://www.amazon.co.jp/exec/obidos/ASIN/4797318155/qid=1112600896/sr=8-4/ref=sr_8_xs_ap_i4_xgl14/249-8116743-0290765

分かりやすい解説付きで、自分で掲示板チャット人工知能掲示板ができるようになる
0821nobodyさん2005/04/04(月) 16:55:08ID:???
ラクダ
0822nobodyさん2005/04/04(月) 16:56:33ID:???
>>819
その本はある程度PerlCGIを分かってる奴じゃないと難しい

>>820

それは俺も持っているCD-ROMの付録付きで遊び感覚な要素が多いな、まぁ初心者にはちょうどいいだろう
掲示板
チャット
人口知能掲示板
人口知能チャット
占い
日記
天気予報
他CGIを作ったゲーム等々が簡単に作れるようになるな
0823nobodyさん2005/04/12(火) 09:56:36ID:2c4b0aVe
質問です。

掲示板CGIなどで、同時書き込みによるデータ―破壊を防ぐために、
いわゆるロック処理がなされていますが、読み込みと書き込みが同時に
行われることには対処がなされていないようです。
例えば、KENTのwebpatioとか。

他のユーザーがファイルを読み込んでいる最中に書き込みが始まったり、
書き込みの最中に読み込みが始まってしまったら、どうなるんでしょうか。

とりあえず、UNIX、アパッチ、Perlを使っているってことで。
0824nobodyさん2005/04/12(火) 10:52:02ID:???
読む分には問題なかろーに。例えカキコ中のページを読んで表示させたとして
も、またリロードすればいいだけのこと。
ただし、読み込んだデータがその後のカキコに影響するような仕組みなら
問題も出てくるだろうが・・・ないよなぁ。。

あと、ロックして一時ファイルにカキコんでリネームすれば半端なデータが
表示されることもなかろーに。

もちろん読み込み中にも同様にロックしてアクセス待ちが溜まる仕組みを
作りたいならそれは自由だとも思う。
0825nobodyさん2005/04/12(火) 11:32:10ID:???
ありがとうございます。

つまり、同時読み書きによる不都合は起こりうるということですね。
ではそういう視点でもう一度勉強しなおして見ます。

> あと、ロックして一時ファイルにカキコんでリネームすれば半端なデータが
> 表示されることもなかろーに。

なるほど。そういう手もありますね。
0826nobodyさん2005/04/13(水) 12:21:24ID:???
ものっすごい初歩的なんですけど
「lesson1.html」というファイルで

<html>
<head>
<title>Input form 1</title>
</head>
<BODY>
<h1>Input example</h1>
<FORM ACTION="lesson1.cgi">
ばるー1<input type="text" name="value1">
<input type="submit" value="おくる">

</FORM>
</body>
</html>

「lesson1.cgi」の中は
#!/usr/bin/perl
require 'cgi-lib.pl';
&ReadParse(*input_data);
print "Content-type: text/html\n" ;
print "<html>\n" ;
print "\n" ;
print "<title>デコけっか</title>\n" ;
print "<body>\n" ;
print "value1=$input_data{'value1}\n" ;
print "</body>\n" ;
print "</html>\n" ;
exit;

なぜ動かないのか、さっぱりわかりません。ご教授おねがいします
0827nobodyさん2005/04/13(水) 12:34:19ID:???
>>826
print "Content-type: text/html\n" ;
print "<html>\n" ;
↓
print "Content-type: text/html\n" ;
print "\n";
print "<html>\n" ;
0828nobodyさん2005/04/13(水) 12:53:23ID:???
$input_data{'value1}

{'value1} => {'value1'} or {value1}
0829nobodyさん2005/04/13(水) 13:04:26ID:???
>827 >828さんありがとうございます。
ほんっとうにありがとうございます。
0830nobodyさん2005/04/13(水) 15:38:14ID:???
質問です。

sub PrnCont($;$) {

(中略)

}

の

($;$) ←これ何?

引数はブレース先頭で@_;で1つ受け取り、
最後の行でreturnで値を一つ返しています。
調べようにも

ttp://www.google.co.jp/search?hl=ja&q=%28%24%3B%24%29&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=

手に負えません・・・。
0831nobodyさん2005/04/13(水) 16:35:41ID:???
>>830
引数のプロトタイプ
セミコロンの前は必須の引数。
つまり($;$)は、スカラー変数が2個必要で必須なのは1個だけという意味
08328302005/04/13(水) 17:31:27ID:???
>>831
ありがとー!
0833質問です2005/04/14(木) 10:12:29ID:JzlzHFO/
$data->[0]{'name'} = 'kenta';
$data->[0]{'age'} = '25';
$data->[1]{'name'} = 'hanako';
$data->[1]{'age'} = '24';

print "Content-type:text/html\n\n";
print "hash = $data->[1]<BR>"; # [1]
print "name = $data->[1]{'name'}<BR>"; # [2]
print "age = $data->[1]{'age'}<BR>"; # [3]

function1($data->[1]);
exit;

sub function1
{
my $data_f = shift;
print "hash = $data_f<BR>";# [4]
print "name = $data_f{'name'}<BR>";# [5]
print "age = $data_f{'age'}<BR>"; # [6]

}
--------------------------------------------------
このプログラムの実行結果は
hash = HASH(0x8156a10) [1]
name = hanako [2]
age = 24 [3]
hash = HASH(0x8156a10) [4]
name = [5]
age = [6]

となりました、引数に渡された値(HASH(0x8156a10))は同じなのにそれを{}でハッシュ本体にアクセスしようとすると正常な値が取れません。
これは一体なぜなのでしょうか?解決方法ではなくこのようになる理由について解説いただけませんでしょうか。よろしくお願いします。
0834nobodyさん2005/04/14(木) 12:57:29ID:???
$data->[0]{'name'} = 'kenta';
$data->[0]{'age'} = '25';
$data->[1]{'name'} = 'hanako';
$data->[1]{'age'} = '24';

print "Content-type:text/html\n\n";
print "hash = $data->[1]<BR>"; # [1]
print "name = $data->[1]{'name'}<BR>"; # [2]
print "age = $data->[1]{'age'}<BR>"; # [3]

function1($data->[1]);
exit;

sub function1
{
my $data_f = shift;
print "hash = $data_f<BR>";# [4]
print "name = $data_f->{'name'}<BR>";# [5]
print "age = $data_f->{'age'}<BR>"; # [6]

}
0835nobodyさん2005/04/14(木) 12:59:34ID:???
>>834

とりあえずハッシュのアクセス時に "->" を付けるとデリファレンスされるんだぉ
0836nobodyさん2005/04/14(木) 17:15:25ID:YqNS5c79
my(@tmp,$i);
my($i,@tmp);

どちらの記述が正しいのでしょうか?
また、双方に違いがあるのでしょうか?
0837nobodyさん2005/04/14(木) 18:37:23ID:???
>>836
別にちがいはないぉ
0838質問です2005/04/14(木) 20:12:10ID:JzlzHFO/
>>835
なぜデリファレンスしなければいけないのか疑問です。
内部構造がわかりません、ちなみに私はこのように考えております。
http://toukatugiken.dip.jp/ref.jpg
間違いを教えて下さい。
0839nobodyさん2005/04/14(木) 23:01:22ID:tgjJ4BEn
CGIをロシア語読みして受けを取ろうと思ってるのですが、
Cはエスですよね?Gはゲー。Iはなんと読めばいいのでしょう?
エス・ゲー・??

専門的なことを聞いてすみません。
0840nobodyさん2005/04/14(木) 23:28:25ID:???
>>839 Cの読み方まちがえてる
a=アー
b=バー
c=カー
d=ダー
e=エー
f=ルー
g=ゲー
h=ハー
i=イー
0841nobodyさん2005/04/14(木) 23:53:12ID:???
>>840
カーはKだろ?KGB=カーゲーベー
0842nobodyさん2005/04/15(金) 00:14:12ID:blqHQHFV
>>841
ゴルゴ13しか知らない低学歴はすっこんでろ
0843nobodyさん2005/04/15(金) 11:11:18ID:???
>>841-842
テラワロス
0844nobodyさん2005/04/15(金) 18:28:36ID:jbs5B7Gv
>>838の者ですが、なんだか話の路線変わってきちゃったようなので、他で聞く事にしますね(´・ω・`)ショボン
0845質問です2005/04/15(金) 20:07:01ID:5ckAPcBA
【CGI名】 スレッド天国 ver.1.10
【配布先URL】  http://specters.net/cgipon/tengoku/download.html
       
 スレ違いでしたら申し訳ありません。
 トリップ機能を付けたいんですが、どうすればいいのか
 ご教授お願い致します。m(_ _)m
0846nobodyさん2005/04/15(金) 20:34:25ID:???
>>845
>>610
0847nobodyさん2005/04/16(土) 05:26:59ID:???
ここでいいのかなぁー?違うかったらごめん+誘導おね

私のPCには現在AN HTTP DaemonVer1.42nと
Apache HTTP SeverとActivePerl5.8が入っており、
http://www.kent-web.com/www/anhttpd/www1.html などを参考に
ローカルでCGIのテストするのですが、c:\www\homeとディレクトリを作り
そこにCGIを入れると、上記サイトにあるような簡単なhello.cgiとか
掲示板とかはサイト内にもあるような
http://127.0.0.1/bbs/aska.cgi
書き方でブラウザも表示確認できるのですが、
http://dream.lib.net/ で配布されているような
掲示板とはまた違った感じのCGIではローカルでブラウザで表示できないのですが
こう言う類のちょっと難しい(私には)CGIをローカルで表示させるには
何かコツといいますか、決まりごとみたいなのってありますか?

perlのパスは間違っていません。

たぶんAN HTTP側の設定とかのような気もいたしますが。
教えていただけませんか。
08488472005/04/16(土) 05:29:54ID:???
すいません どのCGIか書くのlinkrnak.CGIです。

サーバにUPしての表示は出来るのですが、どうしてかローカルでは出来ないもので
すいませんが お願いいたします
0849nobodyさん2005/04/16(土) 07:30:48ID:???
>>847
http://dream.lib.net/ が見られない
http://dream.lib.net/room/なら見られるがlinkrnak.CGIが見当たらない
0850nobodyさん2005/04/16(土) 07:43:55ID:???
>>849 すいません それはダウンロードしたあとのフォルダとかcgi名でした。
ダウンロード→リンク ってところの Ranking Linkってやつです。
0851nobodyさん2005/04/16(土) 11:09:46ID:???
リファラを書き換える?偽装とかするのに便利なperlのモジュールとかありませんか?
0852nobodyさん2005/04/16(土) 11:30:06ID:???
>>851
LWP
0853nobodyさん 2005/05/14(土) 15:45:56ID:???
現在Internet Explorer6 を使用しているのですが、
SSI使用のためhtmlで作成したファイルの拡張子をshtmlに変更したのですが、
ローカルにおいてshtmlファイルがInternet Explorer6 で開けません。
何故でしょうか?

shtmlファイルを右クリック→プログラムから開く→プログラムの選択→Internet Explorer
→この種類のファイルを開くときは、選択したプログラムをいつも使うにチェックを入れる
→OK→開かない
08548532005/05/14(土) 15:57:13ID:???
自己解決しました。
http://www.mozilla.gr.jp/forums/?mode=al2&namber=11606&rev=&0&KLOG=77より

1. Explorer のメニュー「ツール」→「フォルダ オプション」を選択します。
2. パネル内のタブ「ファイルの種類」を選択します。
3. もし一度 .shtml を登録してしまっていれば、「登録されているファイルの種類」から SHTML を探し出して削除します。
4. ボタン「新規」を押します。
5. ウィンドウ「新しい拡張子の作成」内のボタン「詳細設定」を押します。
6. セレクトリスト「関連づけられているファイルの種類」で「HTML Document」を選択します。
7. テキストボックス「ファイルの拡張子」に「shtml」(大文字小文字関係なし)と入力し、ボタン「OK」を押します。

この手順では 6. で「これから登録する拡張子はすでに登録されている HTML と同じ種類のファイル」と教えていることが肝です。
0855nobodyさん2005/05/14(土) 22:43:21ID:jtOAdQNy
パール版猫板の設置方法知りませんか?
Error: 書き出し用のHTMLファイルが見つかりません。 [ No such file or directory ] line:1451
となってしまうんですが

■ このスレッドは過去ログ倉庫に格納されています