トップページ⇒php
984コメント309KB

【Perl】初心者コーナーPart11

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/03/27 12:53ID:wAXxxOxP
 
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。

参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけどなんか質問ある Pert 5.01 】
http://pc.2ch.net/test/read.cgi/php/1015127347/l50
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/

過去ログ、その他の役立ち情報は>>2-10を見よう。
054846902/04/15 01:06ID:???
こたえろおろろろろろろろろろろろろろろろろろろろろろろろろr
0549nobodyさん02/04/15 01:15ID:???
どうか教えてください。

2次元配列で、列の最大インデックス値を求める効率的な方法がわかりません。
自分でなんとか書いてみて、もっとよい方法がありそうな気がしていますが
どうしても思いつきません。よろしくお願いします。

;# $data[行][列] の例
for ($[ .. $#data){
$#{$data[$_]}> $MAX_COL and $MAX_COL= $#{$data[$_]};
}
0550nobodyさん02/04/15 01:20ID:???
>>549
それで十分使えるやろ。Perlってことを忘れるなよ。
数値計算等の効率を重視するならCとかにしろって。
0551nobodyさん02/04/15 01:38ID:???
>>548
>>476の何が不満なんだ?
#our($a, $b);
てして、最後のほうに
print join(",",@sum),"\n";
とか書けば、動くと思うけど。
055255102/04/15 01:39ID:???
イタイ。>>475だった。
055354902/04/15 01:53ID:???
>550
了解しまっ!
055446902/04/15 02:03ID:???
475みたいなコード書く奴は死んでください。理解できません。
0555nobodyさん02/04/15 02:07ID:???
>554
理解したいなら他人に聞いてもしょうがない。
自分で勉強するしか。
>2-4のサイトの中には親切に色々教えてくれる所もあるだろう。

理解するよりも利用したいなら>475のソースをそのまま使えばいい。
055654902/04/15 02:13ID:???
>554
確かに、プロトタイプや複数処理に対応しているところは一見、知ってそうだが
効率の悪い書き方が目立つね。でも、これを理解できないの? どこがわからないの?

0557nobodyさん02/04/15 02:16ID:???
>>556
>>475の効率の悪いとこって、どのへん?
055854902/04/15 02:30ID:???
>557
ループカウンタ $i なんか使う必要ないし、return も遅くなるし、
ループ内で local 宣言を逐一行なってるようなとこかな?
055955702/04/15 04:08ID:???
>>558
なるへそ。localはループの外に出して、returnは省略するとして、
$iを使わないようにするには、どうしよう。うーん。
0560nobodyさん02/04/15 04:37ID:???
foreach( 0 .. $max_index - 1 )
とかかかな?
0561ほほ02/04/15 09:08ID:lbZrq7VB
http://www.kent-web.com/bbs/sample/light.cgi
このcgiに
http://yassu.no-ip.com/haikyo/cgi-bin/log.cgi?room=001
のようにURL指定すると画像張り付くようなことがしたいです。
どのようなソースをどこに付け足せばよいですか教えてください。
0562nobodyさん02/04/15 09:29ID:???
>560
それなら$iを使った方がいい。
その手法だと一度$max_index個の配列を一時的に作ることになってメモリを喰う。
0563nobodyさん02/04/15 09:30ID:???
>561
スクリプト改造工房 Part4
ttp://pc.2ch.net/test/read.cgi/php/1012839651/
0564ほほ02/04/15 09:52ID:7Ngfgl5F
>561さん
そちらの方が適切でしたか、誘導ありがとうございます。
0565nobodyさん02/04/15 12:22ID:???
今どきreturnが遅いとかforeach(1 .. 10000)が巨大なリストを作られるとか言ってるやつ。
書き込む前にベンチマークはしたのかと問いたい。問い詰めたい。小一時間問い詰めたい。
お前等、そんなものは今や時代遅れとちゃうんかと。

俺が見たところ、>>475での問題点は
・ループ内でlocalを使っている
・$a$bはパッケージ変数なので違うパッケージの時動かない
くらいなもんだ。
0566nobodyさん02/04/15 12:25ID:???
どうやらコテハン469はネタみたいなので今後は無視の方法でおながいします。
参考:http://pc.2ch.net/test/read.cgi/php/1018303030/
0567nobodyさん02/04/15 13:36ID:???
perlで常駐ソフトは作れないんですか?
0568nobodyさん02/04/15 13:40ID:???
>>567 Win, UNIX等マルチタスクOSなら作れる。 DOSのTSRは無理。
0569nobodyさん02/04/15 13:48ID:waGQdYYq
>>456
>>457
遅レスですがありがとうございました。参考になりました。
とりあえずjsのwindow.open()で?にて渡すことにしました。
Locationの使い方がサッパリ。
0570nobodyさん02/04/15 14:48ID:???
>>568
回答どうも。
よく分からん単語があったので調べます。
0571nobodyさん 02/04/15 14:51ID:WmWR88F9
問い合わせフォームを使っているのですが、以下の内容で

<FORM name="form1" action="form.cgi" method="POST" enctype="text/plain">
<INPUT type="hidden" name="c_copy" value="on" checked>
<INPUT type="hidden" name="no_check" value="off">
<INPUT type="hidden" name="subject" value="問い合わせ">
<TABLE border=0 >
<TR>
<TD>*お名前:</TD>
<TD><INPUT name="お名前" size="16" type="text"></TD>
</TR>
<TR>
<TD>*e-mail:</TD>
<TD><INPUT name="email" size="40" type="text"></TD>
</TR>

</TABLE>
<INPUT type="submit" value=" 送信 " style="HEIGHT: 24px; WIDTH: 70px">
 <INPUT name=reset1 type=reset value="クリア" style="HEIGHT: 24px; WIDTH: 70px">
</></FORM>


全ての項目に入力した上で送信ボタンを押すと、次の画面で
−−−−−−−−−−−−−−−−−−−−−
内容確認
項目   内容
c_copy  on
     no_check

メールアドレスを入力しないと送信できません
−−−−−−−−−−−−−−−−−−−−−
とメッセージが表示されてしまいます。

何が悪いのか教えていただけませんでしょうか。
よろしくお願いします。

0572nobodyさん02/04/15 15:00ID:???
>571
どこがPerlのコーディングの話なんだ?
Perlのコーディングの話をするスレだから、Perlのコードを出してくれ。
0573nobodyさん02/04/15 15:01ID:???
つーか、まずHTMLの勉強してこい。
そのHTMLソースもグチャグチャじゃないか。
0574nobodyさん02/04/15 15:17ID:???
>>571
form.cgiの中身がおかしいと思います。
0575nobodyさん02/04/15 15:18ID:WmWR88F9
>572&573さん、ご指摘ありがとうございます。
前任者が作成したソースをメンテナンスする事になり、苦労している次第です。
抜粋してPerlのコードを載せます。

#■内容確認
print "Content-type: text/html\n\n";
print "<html><head><title>$title</title></head>\n";
print "$body\n";
print "<h1>内容確認</h1>\n";
print "<form method=\"post\" action=\"form.cgi\">\n";
print "<blockquote><table border=1 cellpadding=3 cellspacing=3>\n";
print "<tr><td bgcolor=\"#ffcccc\"><b><font size=+1>項目</font></b></td><td bgcolor=\"#ffcccc\"><b><font size=+1>内容</font></b></td></tr>\n";
print "<tr><td></td><td></td></tr>\n";

$count = @DATA_NS;

foreach (0..$count-1) {
print "<input type=hidden name=\"$DATA_NS[($_)]\" value=\"$DATA_VS[($_)]\">\n";
print "<tr><td bgcolor=\"#ffeedd\">$DATA_NS[($_)] <br></td>";

if ($DATA_VS[($_)] =~ /\n/) { print "<td bgcolor=\"#ffffff\"><pre>$DATA_VS[($_)]</pre></td></tr>\n"; }
else { print "<td bgcolor=\"#ffffff\">$DATA_VS[($_)]</td></tr>\n"; }
print "</td></tr>\n";
}

print "</table></blockquote><p>\n";
0576nobodyさん02/04/15 15:18ID:WmWR88F9
if ($lct ne "") { print "<input type=hidden name=\"location\" value=\"$lct\">\n"; }

print "<input type=hidden name=\"mailto\" value=\"$mailto\">\n";
print "<input type=hidden name=\"no_check\" value=\"on\">\n";
print "<input type=hidden name=\"ref_page\" value=\"$ref\">\n";

if ($receipt eq "on") { print "<input type=hidden name=\"receipt\" value=\"on\">\n"; }
if ($cc eq "on") { print "<input type=hidden name=\"c_copy\" value=\"on\">\n"; }
if ($ref_url ne "") { print "<input type=hidden name=\"ref_url\" value=\"$ref_url\">\n"; }
if ($ref_name ne "") { print "<input type=hidden name=\"ref_name\" value=\"$ref_name\">\n"; }
if ($subject ne "") { print "<input type=hidden name=\"subject\" value=\"$subject\">\n"; }
if ($password ne "") { print "<input type=hidden name=\"password\" value=\"$password\">\n"; }

if ($email eq '' || !($email =~ /(.*)\@(.*)\.(.*)/)) { print "<font size=+2><b>メールアドレスを入力しないと送信できません</b></font><p>\n"; }
else { print "<input type=submit value=\" 送信(submit) \"><p>\n"; }
print "</form><p><hr>\n";

以上、よろしくお願いします。
0577nobodyさん02/04/15 15:50ID:???
>575-576
なんともまぁ酷いコードだな・・・。

ともあれ>571のエラーが出るならメールアドレスが入力されてないんだよ。
[email protected]って入力して試してみ。
@と.が入ってないとエラーを吐くだけだから。

つーか、前任者には聞けないのか?
0578nobodyさん02/04/15 15:50ID:???
>>571よ悪いことはいわん。上司に「僕には無理です」と泣き付け。
0579nobodyさん02/04/15 16:07ID:WmWR88F9
>574さん、私もcgiとHTMLソースがうまくかみ合っていないのが原因では?と
考えています。
>577さん、それがメールアドレスを入力しているのに関わらず、エラーが
出ているから困っています。
ちなみに「hoge」「hoge@hage」「[email protected]」の何れを入力しても
同一のエラーが出ます。
>578さん、泣き付ける上司がいればいいのですが、あいにくおりません。

0580nobodyさん02/04/15 16:31ID:YGeSanjU
だって現に無理じゃん、しょうがないよ。
>>578はいいこと言ったよ?
058157702/04/15 16:55ID:???
>579
俺も>580に同意。
前任者がPerlもHTMLもロクに理解していない。
後任のあんたも全然理解していない。
そのスクリプトがエラーになる原因が「思い当たりすぎて」どうしようもない。
そしてアンタ自身にそれを試験しその経過を正確に報告するスキルが無い。
そんな状態でここから指示を出してたら1ヶ月経っても2ヶ月経っても無理だ。

はっきり言って、ケントでもレスキューでも行って多少でもまともなCGIを
拾ってきた方がよっぽどいいと思うぞ。
はっきり言う。
無理だ。

正直、俺から見ると、そのスクリプトを修正するより、自分で1から
作った方が楽にすら思える。
058258002/04/15 17:22ID:YGeSanjU
とりあえず、やめろとは言わん。
どっかで似たもののCGI探して、
そのCGIとにらめっこして、原因を追究すべし。

2ちゃん寝るの上級者が答えてくれればいいってもんだけど、正直、わかり難い。
058346902/04/15 17:34ID:???
>>556
もっといいのを書いてください!
それだけ知った口を叩けるのだから!!!
0584nobodyさん02/04/15 18:00ID:???
475もいい迷惑だな(w
0585nobodyさん02/04/15 18:05ID:8YI2JjdJ
こんにちは、
これってどうしてちゃんとコード変換しないのでしょう?
ヒアがいけないような気もするのですが...
みなさんはメールのフォーマットってどうやっていますか?

$hoge = "こんにちは";

&jcode'convert(*hoge,'sjis');

$mail_tex = <<HERE;

フォームの内容は$hogeです。
フォームの内容は$hogeです。
フォームの内容は$hogeです。

HERE

&jcode'convert(*mail_tex,'jis');

print $mail_tex;

ちなみにこれはEUCで書いたソースだとします。
sjis変換はログ保存用だと思ってください。

どうかよろしくお願いします。
058646902/04/15 18:25ID:???
糞ばっかりだなここは
意味不明コード厨房に知ったか厨房かよ
ぼけ
058758502/04/15 18:56ID:8YI2JjdJ
本当、意味不明ですいません。
自分でもなにをしてるのか分からなくなってきています。
ちなみに、sjisの所をeucにしても一緒でした。
そろそろ動けばいいって作り方から卒業したいです。(泣
0588nobodyさん02/04/15 20:06ID:???
>>587
&jcode'convert(*hoge,'sjis');
を消せば、いんでないかと。
0589nobodyさん02/04/15 20:09ID:???
>>575
デバッグの基本はプリントだ!
$emailをチェックしている行の直前に、
print "[$email]<BR>";
って入れて、確認しよう。
0590nobodyさん02/04/15 20:33ID:???
とりあえず関係なさそうだが
&jcode'convert(*hoge, 'sjis')
これを
&jcode::convert(\$hoge, 'sjis');
にしておけ。
0591nobodyさん02/04/15 20:38ID:YGeSanjU
とりあえず意味なさそうだが
&jcode'convert(*hoge, 'sjis')
これを
exit;
にしておけ。
0592nobodyさん02/04/15 20:45ID:???
>>584
禿同。

_gunzipのコードは参考になるところが多いから常駐してホスィんだけど、
エライのに目をつけられたもんだ(w
0593nobodyさん02/04/15 22:38ID:???
なんかあんまり技術的な質問じゃないんですが
掲示板とチャットの違いってスクリプト的に
どのあたりで線引きされるもんですかね?
これとこれみたいな事ができればチャット、もしくは掲示板みたいな
定義があれば教えてください。
0594nobodyさん02/04/15 22:52ID:G09favcm
>580さん、そうですか。無理ですか・・・。(残念です)
>582さん、これを作った人とはもう連絡が取れない状況で自営業をしている
友人が困って私に調べて欲しいと依頼が来た次第です。(なので、仕事とは
全く無関係です)
指摘される通り、私にはあまり知識はありません。
別のCGIを拾ってきて、一から作ってみたいと思います。
>582さん、他の似たようなCGIと比較して原因を調査してみます。
ありがとうございました!!
0595nobodyさん02/04/15 22:53ID:???
あてはまればチャット
・リロードの回数が多い(リアルタイムで返事がくる)
・コメント欄がおそらく一行
・「入室」する
059659302/04/15 23:08ID:???
>>595
39
やっぱログインがポイントだよね。
0597589だけど誤爆じゃないよ02/04/15 23:12ID:???
>>594
デバッグプリントも試してみてくれーーー
0598nobodyさん02/04/15 23:30ID:???
粘着低脳ぶりが.htaccessの偉い人荒らしてた奴そっくりだな。
0599nobodyさん02/04/15 23:39ID:???
>595
自動リロードがあったら間違いなくチャットだな。

>593
一部勘違いされがちだが、無料鯖で禁止されるのは「チャット」じゃなくて
「チャットのような負荷の高いCGI」だからな。
「HTML吐出しなどで負荷の少ないチャット」よりも「リロードを繰り返されるBBS」
の方がよっぽど厄介だ。


そういう意図で聞いたんじゃなかったらすまない。
060060002/04/15 23:47ID:???
>>599
勘が良いね。
0601nobodyさん02/04/16 00:04ID:3Tlg2ssN
ttp://popup2.tok2.com/home/vbokc/moe/
こういうところから画像を一気に拾う方法ってperlだと
間単にできるんですか?
0602nobodyさん02/04/16 00:11ID:???
>601
LWPを使えば結構簡単にできるが、Web上に置くのは勧められないな。
0603nobodyさん02/04/16 00:14ID:???
>>599
チャットだとHTML吐き出しだと負荷少ないのか?
0604nobodyさん02/04/16 00:24ID:???
>603
チャットに限らず、HTML保存させればCGIの呼び出し回数が減るから、相対的に負荷は減る。
0605nobodyさん02/04/16 00:27ID:???
チャットはHTML保存で付加は減らないと思われ…。
むしろ、共用メモリを使って全てメモリ上でやるのが吉と見た。
0606nobodyさん02/04/16 00:33ID:???
>>603,>>605
確かにチャットはHTMLでやってもあんまり意味無いよね。
その他にもHTML吐き出しだと運営上デメリットが多すぎる。
0607nobodyさん02/04/16 00:41ID:???
>>603>>605>>606
>>604の言うとおり、リロード時にCGIではなくHTMLにアクセスさせれば、
負荷減ると思わない?
0608nobodyさん02/04/16 01:07ID:???
書き出し方によるかな。
保存したログ読んでそっから別のHTMLに書きだすって真似やってたら
HTML吐き出しの方がきついんじゃない。
チャットってリロード以前にその性質上ROMより
書き込むことのほうが多いから。
0609nobodyさん02/04/16 01:11ID:???
>>607
リロード時の話じゃないけれど。HTML化すると投稿時の動作が
「データをPOST → レスポンス取得」から
「データをPOST → 302 Found取得 → ブラウザがhtmlをリクエスト → 結果取得」
になるので、投稿時の体感速度は確実に遅くなる。低速回線だと少し厳しい。

それにHTML化は参加者:ROMの比がROMに偏っていない限り余り意味が無いと思われ。
061060402/04/16 01:17ID:???
>609
それは確かにその通りだ。
ごもっとも。

オートリロード先をHTMLにしておけば多少は軽減になるかな?
メタタグとかでnocacheにしておいて。
061160702/04/16 01:56ID:???
>>609
たしかに、チャットなら、書き込み:ROMの比は書き込みのほうが高いか。
0612nobodyさん02/04/16 03:38ID:Z11bRvgC
以下にソースを貼り付けました。これは http://dream.lib.net/room/ で配布されて
いるLightChat のログを表示するためのCGIの一部です。
#管理人の私がコソーリROMるため(w

1. foreach $chatlog (@chatlog) {
2.   ($name,$dmy1,$dmy2,$mail,$actime,$cont,$ip1,$ip2) = split(/<>/,$chatlog);
3.   if ($cont =~/<b>\[/i){
4.     $cont =~ s/<b>\[/<>/g;
5.     $cont =~ s/]<\/b>/<>/g;
6.     ($dmy,$personal,$cont2) = split(/<>/,$cont);
7.     $name = "$personal";
8.   }
9.   print "<a href=\"$mail\">$name</a>> $cont2($actime)<br>\n";
10. # print "<a href=\"$mail\">$name</a>> $cont($actime)<br>\n";
11.  print "<hr>\n";
12. }

これで、チャットのログを表示しようと思ったのですが、9行目の $cont2 に他の行
の内容が入ってしまうようです。 なお、3〜8行目を削除して10行目を生かすと
この障害は無くなります。
なにとぞ、よろしくお願いしますm(_ _)m
0613612 補足02/04/16 03:43ID:???
書き込んだ人<>2<><>[email protected]<>日時<><b>[個人 書き込んだ人>受取人]</b> 内緒の話<>書いた人のIP<>受け手のIP<>

ログの形式は上記の通りです。
0614nobodyさん02/04/16 04:07ID:???
>>612
ログ中に <b>[ っつー文字列が無い行では3行目から8行目までの処理がすっ飛ばされて
前に読み込んであった$cont2が表示されているだけじゃないの?

と適当に答えてみるテスト。
0615nobodyさん02/04/16 04:09ID:???
>>614
それだな。
0616nobodyさん02/04/16 11:33ID:???
>>614
馬鹿
>>615
馬鹿
0617nobodyさん02/04/16 13:00ID:???
ワラタ・・・
061861202/04/16 13:59ID:???
>612
あ、本当だ(汗) こんな単純なことに気が付かない私が愚かでした。
鬱だ、書き直そう…

>614-615サンクスコ
0619162202/04/16 16:52ID:Q1JSTWAi
sample
<form action="http://127.0.0.1/cgi-bin/input/input2.cgi" method="GET">
<input type="text" name="name">
<input type="submit" value="実行">
<input type="reset" value="クリア">
</form>
上記のHTMLフォームからデータを入力して、受け取ったデータをファイルに書きこむ処理をしたいのですがうまくいきません。
$query = $ENV{ 'QUERY_STRING' };

open IN, "$send";
@all = <IN>;
close IN;

@all = $query;
open OUT,">$send";
foreach (@all){
print OUT $_;
}
close OUT;
これではエラーが出ます。教えてください。
0620名無しさん@edlin 02/04/16 17:30ID:???
>>619
なんていうエラーがでるんだね?

とりあえず、ぱっと見、あやしそうなところとして、
@all = $query;
を
push(@all,$query);
に直そう。
0621162202/04/16 17:58ID:UyNwZUnG
500Internal Server Errorとでます。push(@all,$query); に変更しましたが同じでした。
$query = $ENV{ 'QUERY_STRING' };

open IN, "$send";
@all = <IN>;
close IN;

push(@all,$query);
open OUT,">$send";
foreach (@all){
print OUT $_;
}
close OUT;
この方法以外でもいいので、教えてください。
0622 02/04/16 18:03ID:???
テキストファイルに記述したHEX数値から、
バイナリファイルを作成したいのですが上手くいきません。
動作イメージとしては
テキストで「31323334」とあったら、これを変換し、バイナリダンプしたときに、
「31323334」となるようにしたいのです(この例だとテキスト表示すると1234になります)。

試行錯誤しながら、以下のように作成したのですが、
テキストに「0A」があった場合に、その部分が「0D0A」になってしまうようです。
改行コードだと思うのですが、どのように対処すればいいでしょうか?

while ($_ =<F1>) {
$_ =~ s/ //g; #スペース削除
chop; #行末改行削除
$bin = pack("H*", $_);
print OUTPUT $bin;
}


使用しているのは、jperlのWIN32版です。
jperl5.005_03-990403
062362002/04/16 18:12ID:???
>>621
エラーログにはなんて出てる?
Premature end of script headers
とか出てない?
0624nobodyさん02/04/16 18:14ID:???
>>622
うーんと、Win32版でバイナリオープンてどーやんだっけ。
binmode(OUTPUT);
か。
062546902/04/16 18:26ID:???
>>556
早く答えろよゲス野郎
0626 02/04/16 18:28ID:???
>624
おかげさまで解決しました。
ありがとうございました。
0627nobodyさん02/04/16 19:27ID:r+rfWQLJ
WinXP上でActivePerl 5.6を使っています。
スクリプトのあるフォルダのパスを得るにはどうすればいいのでしょうか。
open OUT, '>./hoge';
などというようにすると、現在の作業フォルダにhogeが作成されて、
必ずしもスクリプトのあるフォルダには作成されません。
そこで、必ずスクリプトのあるフォルダにhogeが作成されるように、
スクリプトのあるフォルダのパスを得たいんです。
062862702/04/16 19:36ID:???
ごめんなさい、$0ってのがありました。
この変数の値を元に取り出すことにします。
0629hanamogera ◆kkkKkkko 02/04/16 19:44ID:QVh0tmfS
@hage = split(/<>/, "hoge<>hogehoge<>");
としたとき、@hageの要素数は2ですか?
つまり、$#hageは1になるんですか?
0630nobodyさん02/04/16 19:50ID:???
>>629
3
0631nobodyさん02/04/16 19:59ID:???
>>629
やってみりゃわかると思うけど2だ。perlfuncのsplitを読むべし。
splitはデフォルトで末尾の空文字列を省略する。

3にしたい場合は
@hage = split /<>/, "hoge<>hogehoge<>", -1;
0632nobodyさん02/04/16 20:13ID:???
ちなみに、最近このスレによく出てくる <> をデリミタにしたCGIって何なのかな?
0633nobodyさん02/04/16 20:23ID:???
>632
タグの<>を$amp;lt;&gt;に変換すると絶対に文中に<>が出てくることはないから、
CGIでは使い勝手ががいい。
0634nobodyさん02/04/16 20:24ID:???
>633
タイプミススマソ。
&と$を打ち間違える漏れって一体…(鬱
063562702/04/16 21:39ID:???
ActivePerl v5.6.1 build 631をWinXPで動かしています。
map使ってて気づいたんですが、
map { "$_", } (0..5);
を実行すると
syntax error at D:\プログ~1\hoge.pl line 1, near "} ("
Execution of D:\プログ~1\hoge.pl aborted due to compilation errors.
と言われます。
map { "$_" } (0..5);
map { $_, } (0..5);
では問題ありません。
syntax errorになる理由は何なんでしょうか。
0636nobodyさん02/04/16 22:16ID:???
>>634
心配するな俺もよくある。
それより\とyを打ち間違う漏れって一体・・・(鬱
0637nobodyさん02/04/16 22:21ID:???
map { "$_", } (0..5); が文法的に間違ってるからエラーになるんだってば。
なんで最後に , を付けたいの?
063863202/04/16 22:34ID:???
>>633
なるほど。特定のCGIがそうしてるとか、どっかのページで
推奨してるのかと思ったよん。
063963502/04/16 22:38ID:???
map { "$_", } (0..5);のどの辺りが間違ってるんでしょうか。
map { $_, } (0..5);ではエラーでないのに、
$_を"$_"に書き換えるとエラーになるのが納得いかないんです。
最後に,をつけてるのは
use Getopt::Long;
our %config = (base_uri => 'http://www.2ch.net');
GetOptions map { "$_:s" => \$config{$_} } keys %config;
print $config{base_uri};
みたいに使いたいからです。
今はmap { "$_:s" => ...をmap { $_ . ":s" => ...にして逃げています。
064063502/04/16 22:42ID:???
もちろんmap { "$_", } (0..5);の,を=>に書き換え(639であげた例のように)ても、
同じようにエラーになります。
064163702/04/16 22:59ID:???
あれ、ほんとだ。よく読んでなくてごめん。
とりあえず動くだけなら
GetOptions map { ("$_:s" => \$config{$_}) } keys %config;
にしたら動いたけど・・・・・・演算順序の関係かな?
0642nobodyさん02/04/16 22:59ID:???
map { +"$_", }(0..5);

perldoc -f map
064363502/04/16 23:15ID:???
>>641さん
いえ、読みにくい文書ですみませんでした。
perldocによると、
%hash = map { "\L$_", 1 } @array # perl guesses EXPR. wrong
%hash = map { +"\L$_", 1 } @array # perl guesses BLOCK. right
%hash = map { ("\L$_", 1) } @array # this also works
とのことです。
>>641さんの解決策は三番目にある方法ですね。
有り難うございました。

>>642さん、有り難うございました。
perldoc読むの忘れてました。申し訳ないです。
0644162202/04/17 14:48ID:v8Tp5NVP
500Internal Server Errorとでます。push(@all,$query); に変更しましたが同じでした。
$query = $ENV{ 'QUERY_STRING' };

open IN, "$send";
@all = <IN>;
close IN;

push(@all,$query);
open OUT,">$send";
foreach (@all){
print OUT $_;
}
close OUT;
この方法以外でもいいので、教えてください。

エラーログにPremature end of script headersと出ています。どうしたらいいのですか?
0645nobodyさん02/04/17 15:29ID:79RKjLpb
モジュールのBenchmarkについて解説しているサイトありませんか?
googleでいろいろ調べましたけどありませんでした。
0646nobodyさん02/04/17 15:57ID:???
>>645 perldoc Benchmarkで十分だろ。
0647Dream 黒星02/04/17 16:01ID:???
>644
CGI の質問ならスレ違いだろ! って、そのエラーログ見て解決できんのか!

>645
以下にアクセスしろ!
ttp://perldoc/-m/Benchmark/
■ このスレッドは過去ログ倉庫に格納されています