トップページphp
1001コメント358KB

Perl 初心者コーナー Part23

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/05/16 11:18ID:zDRBc/j4
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

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

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


CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
CGIに依存しないPerlの話題一般/Part2
http://pc2.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/

過去ログやお勧めサイトは >>2-10
076676403/06/03 01:20ID:0MDIlf0d
申し訳ありません。自己解決してしまいました。
報告としてはmkdirのあとに更にchmodをすることで解決するようです。
0767nobodyさん03/06/03 02:02ID:???
>>766
そんなんあたりまえだろヴァカ
0768nobodyさん03/06/03 02:09ID:6112bZio
・_・y━””ここで一服
http://homepage3.nifty.com/coco-nut/
そしてあぷろだはここ
http://www.k-514.com/imgbbs1/imgboard.cgi
076974803/06/03 11:54ID:???
1個のテンプレートファイルを開いて(ここで、すでにsjisになってることを確認)
(ちなみに秀丸)
一応、もう1回、SJISで明示的に保存したら、うまくいきました。

と、同時に、別のかしょ(テンプレートファイルもまったく別<いじってない)
が、このあと全てなおってました。。。

意味不明です。。。まぁ、なおったからいいんですが・・・
0770nobodyさん03/06/03 12:09ID:1E21CA31
>769=748 いやだからね CGIファイルがeucなら、 明示的に「Content-Type: text/html;charset=Shift_JIS\n\n」って書かないと、 sjisのテンプレをeucだとして読み込んで出力するんだから化けるの当たり前っしょ
0771nobodyさん03/06/03 13:26ID:8vlIkX7m
例えば'ef78a90134ef78a90134'という[0-9a-z]を使った文字列を、先頭から2文字づつを16進数としてアレイに格納するにはどう書けば良いでしょう?
文字数が偶数個であることは保証されています。
s/(..)/$1 /gで一旦変換後split, hexするのは思いつきましたが、もっとカコイイ書き方はありますか?
0772nobodyさん03/06/03 13:29ID:???
>744
http://www.i-say.net/cgi/tips_listview.php3
0773nobodyさん03/06/03 13:58ID:???
>>771
unpack
0774nobodyさん03/06/03 14:22ID:???
open と opendir について質問です。

MS-DOS や windows のファイル共有で使う UNC 名(?)を
open や opendir で使うにはどの様な書式でファイル名を
渡せばいいのでしょうか?

$name = '\\\\share_name\\dir\\';

opendir( DIR, $name );

とか、やっても駄目でした。
077574803/06/03 14:46ID:???
>>770
あー、そういうことなんですね。ありがとうございます。
0776nobodyさん03/06/03 15:41ID:???
配列を先頭からm個に切り詰める方法で何かいいのない?
無限ループ内でm個になるまでpopするくらしか思いつかない。。
0777nobodyさん03/06/03 15:46ID:???
>>776
$#a=m-1;
0778nobodyさん03/06/03 15:47ID:???
>>776
splice
077977603/06/03 15:50ID:???
うぉ、速レスが2つも。
ありがとうございます。

splice、すっかり忘れてた。恥かしい限りです。
078077103/06/03 17:11ID:???
なるほど、↓んな感じですね。'H'の意味を間違えてはまってました。
unpack('a2' x (length($str) / 2) , $str);
0781nobodyさん03/06/03 19:59ID:???
Undefined subroutine &jcode::f called at jcode.pl line 400.
というエラーが出てしまいます。

もちろんjcodeはいじってませんし、なお、jcode.plは最新版です
この場合のデバッグって、どういう姿勢というか考え方で行なえばいいのでしょうか?
どこを直せばいいかまったくわからず・・・
0782nobodyさん03/06/03 20:07ID:???
>781
まず辞書をひく。
0783nobodyさん03/06/03 20:34ID:PcOC09to
質問です。
えとアクセスしたらIPとそのアクセスした日にち・時間をログに保存するスクリプト教えてください。
お願いします!!ちなみにこれは荒らし対策です
078478103/06/03 20:37ID:???
jcodeとは別の自作の方のscriptを、前のバージョンに戻ってそこから書き直したら、
エラーが出なくなりました。

>>782 いや、英語はわかるんですけどねー・・・
結局原因がわからなかったものの、解決してしまいました(なんか歯切れが悪いですが)
0785nobodyさん03/06/03 20:48ID:???
>>783
スレ違いだがね。
http://www.google.com/search?as_q=%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88&hl=ja&ie=UTF-8&oe=UTF-8&c2coff=1&btnG=Google+%E6%A4%9C%E7%B4%A2&as_epq=%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%AD%E3%82%B0%E8%A7%A3%E6%9E%90
0786nobodyさん03/06/03 20:53ID:EuO1wjCe
よろしければお智恵を貸して下さい
行末に時間記述のあるテキスト xxx.txt を
時間順に修正、上書きすることってできるでしょうか?
xxx.txt
------------------
.... 01-jan-2002
.... 02-jan-2001
.... 01-jan-2001
------------------

------------------
.... 01-jan-2001
.... 02-jan-2001
.... 01-jan-2002
0787nobodyさん03/06/03 21:10ID:9Ku6+BeZ
Undefined subroutine &jcode::f called at jcode.pl line 400.
というエラーが出てしまいます。

もちろんjcodeはいじってませんし、なお、jcode.plは最新版です
この場合のデバッグって、どういう姿勢というか考え方で行なえばいいのでしょうか?
どこを直せばいいかまったくわからず・・・

0788nobodyさん03/06/03 21:28ID:???
>>784
おまえは本物のアレか?
「読んだけどよくわかりませんでした」

jcode内部にfなんてルーチンねえよボケって意味だろうが。
可能性としては、
1.おまえのjcodeの扱いが変。
マニュアル読みつつ、jcode呼び出してるところを全部チェックする。
2.jcodeのバグ。
製作者に報告。

ま、1を5000回くらいやってから2だと結論するようにな。
0789nobodyさん03/06/03 21:33ID:???
相手にしるなと
0790nobodyさん03/06/03 21:48ID:???
>>786
やり方次第で。

とりあえず思いついたのは、

1.一行取り出して、
2.末尾の時間をコピーし、
3.それをepoch秒に変換し、
4.この秒をキーにしてハッシュに行全体を代入する。
これをファイルが尽きるまで繰り返す。

5.ハッシュからキーを全て取り出し、
6.数値として扱ってソートする。

7.ソート後の順番で値を全部ファイルに出力すれば、完成。

実際のコーディングで難しいのは、3のあたりかもなー。
Dateなんたらモジュール使えば楽にできそうな気もする。
力技で20030603214900みたいな形式に変換しても用は足せるだろうが。
079178603/06/03 22:38ID:EuO1wjCe
>>790
レスありがとうございます。
う〜ん、なんか初心者の私には難しそうですね。
さくっとあきらめようかしら。
0792nobodyさん03/06/03 22:44ID:I9aep0OW
みてね♪
http://www1.free-city.net/home/s-rf9/page006.html
0793直リン03/06/03 23:10ID:HzexL3AB
http://homepage.mac.com/yuuka20/
0794nobodyさん03/06/03 23:15ID:???
2バイト文字か、そうでないかを判断する方法を教えてください
0795nobodyさん03/06/03 23:16ID:???
>794
文字コードで検索。
じゃなきゃ、>>4のサイトをまわってみ。
0796nobodyさん03/06/03 23:22ID:???
>>791
ソースを晒してみろ。
バグが出てる部分だけでもいいし、
全部を、どこかのアプローダーに上げてもいいし。

少し、見てやるから。
079779103/06/03 23:23ID:???
ごめん・・・誤爆ですた。
0798796&79703/06/03 23:24ID:???
ドツボだ・・・
誤爆2回ですた。
0799nobodyさん03/06/03 23:52ID:???
>>786
ちょっと書いてみた。年号・月名(文字変換)・日の順番に並べてからソート。
同じ日のデータが複数行があるとだめぽ。そのときは、改作しる。

%mon=qw(jan 01 feb 02 mar 03 apr 04 may 05 jun 06 jul 07 aug 08 sep 09 oct 10 nov 11 dez 12);
@mon=qw(jan feb mar apr mai jun jul aug sep oct nov dez);
while(<>){
chomp;
split;
($date=$_[$#_])=~s/(\d+\-)(\w+)(\-\d+)/$3$mon{$2}$1/;
$hash{$date} = $_;
}
foreach $key (sort {$a <=> $b;} keys %hash) {
print $hash{$key}, "\n";
}
0800nobodyさん03/06/04 02:44ID:???
大分類(数字二桁)>小分類(ハッシュで 種類,価格) とデータを管理していて、
大分類の数字(01など)がトリガーになって、対応する小分類の中身を全て表示する、という風にしたいのですが、どうもうまくいきません。

例えば
$data{'01'} = { "エンピツ" => 100, "消しゴム" => 80 };
$data{'02'} = { "ネクタイ" => 1000, "ワイシャツ" => 1500 };
$data{'03'} = { "コート" => 10000, "マフラー" => 2500 };

while(($num,%temp) = each(%data)){
 print "$num<BR>\n";
  while(($name,$price) = each(%temp)){
   print "$name $price<BR>\n";
  }
 print ".......<BR>\n";
}
としても
080180003/06/04 02:44ID:???
01
HASH(0xbc864)
...
02
HASH(0xcd5c4)
...
03
HASH(0xcd6cc)
...
と、よくわからないものが返ってきてしまいます…

%kind01 = ( "エンピツ" => 100, "消しゴム" => 80 );
としておいて
$i = '01';
 while(($name,$price) = each(%kind$i)){  print "$name $price<BR>\n"; }
としてもエラーになってしまいます。
どのようにするのがベターなのでしょうか…
0802nobodyさん03/06/04 03:32ID:???
>>801
でりふぁれんす
080380003/06/04 03:50ID:???
>>802
ありがとうございます。今モーレツに感動してます(;´Д⊂ヽ
ぐぐって一発目に出てきたページをみて組み直しました。

$data{'01'} = { "エンピツ" => 100, "消しゴム" => 80 };
$data{'02'} = { "ネクタイ" => 1000, "ワイシャツ" => 1500 };
$data{'03'} = { "コート" => 10000, "マフラー" => 2500 };

$hoge = '01';
$temp = \%data;
$x = $$temp{$hoge};
while(($i,$j) = each(%$x)){
 print qq|種類"$i" 値段"$j"円<BR>\n|;
}

たったこれだけで出来るとは・・・すげー(;´Д⊂ヽ
080480003/06/04 04:00ID:???
まじですげー
考えたやつエライ(;´Д⊂ヽ
興奮が収まらない・・・
080578603/06/04 10:33ID:nmL3emss
>>790
>>799
レス、ありがとうございます。
やっぱり始めたばかりの私には
まだ荷が重いみたい(〃▽〃;)
勉強して出直してきまーす。
0806nobodyさん03/06/04 10:42ID:???
論理値 $flagに対して
if ($flag) とやるみたいに、

論理値 $HOME[$myhomeid]->{flag} に対して、
if (!$HOME[$myhomeid]->{flag})
としたいのですが、

できない模様です。

どのように表現すればいいのでしょうか?
if ($HOME[$myhomeid]->{flag} == TRUE)
とするしかないですか?
0807nobodyさん03/06/04 10:52ID:???
>>806
・・・かなり、できる模様ですが。
0808nobodyさん03/06/04 10:53ID:???
>>805
せっかく作ってやったんだからやってみろよ。
>>799の@mon=...の行は不要だった。消してね。
それとよく見たら、昇順ソートしたいのね。
それなら、{$a <=> $b;}ってとこ、{$b <=> $a;}にすればできるよ。
080980603/06/04 11:01ID:???
>>807
え、if (!$HOME[$myhomeid]->{flag})で問題ないはず、ってことですか?
おかしいなー。
0810nobodyさん03/06/04 11:03ID:???
>>806
>>807
$HOME[$myhomeid]->{flag} = "false"とかやってるに100真珠
0811nobodyさん03/06/04 11:09ID:???
>>810
ああ・・・なるほど。
それじゃ、俺も同じく・・・

文字列を評価して偽の判定を期待してるに3000カノッサとスパーひとしくん人形を20個。
0812直リン03/06/04 11:10ID:qArPuVJp
http://homepage.mac.com/yuuka20/
0813nobodyさん03/06/04 13:06ID:tEfKxFs6
win98で動くPerl用エディタの定番を教えてください。
0814nobodyさん03/06/04 13:15ID:???
>>813
スレ違い

Perl書くのにどんなエディタ使ってる?
http://pc2.2ch.net/test/read.cgi/php/1014357485/

使いやすいエディタって何よ?
http://pc2.2ch.net/test/read.cgi/php/991372719/
0815_03/06/04 14:11ID:???
http://homepage.mac.com/hiroyuki43/hankaku03.html
0816nobodyさん03/06/04 15:14ID:???
自作CGIを評価するスレ
http://pc2.2ch.net/test/read.cgi/php/1049514428/301
これに
> 1、goto文なんか使うな!
って書いてある。
漏れも誰かかにそう言われてずっとそれを守っているのだが、
(つーか、使いたい状況になったことはないが)
何で「使うな」のかと今自分に問いただしても答えが出せない。

ぐぐってみても、C言語でgoto文使う香具師は云々はヒット汁が、
perlでは見当たらない。

だれぞ漏れにgoto文使うなの意味を教えれ!
0817nobodyさん03/06/04 15:23ID:???
>>816
gotoは用途によっては使ったほうが便利な場合もある

goto ( &sub); みたいに
0818nobodyさん03/06/04 15:48ID:???
>816
昔のN88BASIC(構造なんて考えずに何でもあり言語)のころからの諺。
スパゲティになるから。
0819nobodyさん03/06/04 15:48ID:???
>>816
GOTO文有害論は半世紀近い昔に結論されてる。man perlfuncのgotoのところ見るべし。
>>817のは例外
0820nobodyさん03/06/04 15:55ID:QLc9Kvie
モジュールの中でCGIやCGI::Liteのようなものは

$cgi->is__error and (独自の終了処理);

とすることができるのですが、HTML::Templateのように
自動的にSTDERRに書き込んで終了してしまう物は
どのように自分のスクリプト側でエラーを捕捉することが
できるのでしょうか。

どうかよろしくお願い致します。
0821nobodyさん03/06/04 16:37ID:yPvJTG3F
>>820
ttp://www.google.com/search?hl=ja&ie=Shift_JIS&c2coff=1&q=KCatch&lr=lang_ja
つかってますか
0822nobodyさん03/06/04 16:52ID:gwvKQAZH
★クリックで救える○○○○があるらしい??★
http://yahooo.s2.x-beat.com/linkvp/linkvp.html
0823nobodyさん03/06/04 16:54ID:???
>>821
こんな便利なモジュールがあったとは知りませんでした。
本当にありがとうございました
0824動画直リン03/06/04 17:10ID:qArPuVJp
http://homepage.mac.com/hitomi18/
0825動画直リン03/06/04 17:10ID:qArPuVJp
http://pc2.2ch.net/mysv
0826_03/06/04 17:23ID:???
http://homepage.mac.com/hiroyuki43/hankaku03.html
082781603/06/04 17:51ID:???
>>817-819
サンクス!
> スパゲティになるから。
が言い得て妙でつた
0828nobodyさん03/06/04 18:25ID:???
そらそうだろう
0829nobodyさん03/06/04 19:38ID:???
ファイルの内容を、chom; split;して生成した配列のリファレンスを
1の方法で@fileに格納していくということを考えて書いてみたのですが、
正常な値が得られず、2の方法なら正常に得ることができました。
この2つは全く同じ動作と予想していたのですが、1と2では
なにが違うのでしょうか?

1、
@file = map { [ split( /\t/, chomp ) ] } ( <FILE> );

2、
while( <FILE> )
{
 chomp;
 my @array = split( /\t );
 push( @file, \@array );
}
0830nobodyさん03/06/04 19:52ID:???
>>829
chompの動作を誤解してる。
chompは引数の末尾に改行があったらそれを削除するが、
同時に削除した改行文字の数を返り値として戻す。
その数字をsplitに渡してるだけなので、望んだような結果にはならないだろう。
083182903/06/04 20:32ID:???
御返信ありがとうございます。
きちんと理解しないまま今まで使用していました。
以下の様に変更したところ正常にどうさするようになりました。

@file = map { chomp; [ split( /\t/ ) ] } ( <FILE> );
0832室長03/06/04 22:12ID:???
すみません。初めてのCGIで、IPアドレスを表示するスクリプトを作ってみたいと思ったのですが、どうにも上手く動きません
是非ヒントをいただければ幸いであります、、、、

ソース
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html>\n\n";
print "<head></head>\n";
print '<body bgcolor="black" text="white">';
print "<b>";
print "\n";
$host = &gethost;
$trueip = &getip;
print ="Remote Host = $host<br>\n"
print "IP = $trueip <br>\n";
print "</b>";
print "</body>";
print "</html>";
exit;
0833室長03/06/04 22:15ID:???
表示されるhtmlは真っ黒で、ソースは、<b>までで停止してます。。。
厨なのは分かってますが、どなたかぜひご教授ねがいますです。。。。。
0834nobodyさん03/06/04 22:22ID:???
>>832-833
あのさ・・・
<b>で停止するって事は、
それ以降で問題が起きてるって事でしょ?
&gethost か、&getip ってルーチンに問題があるんでしょ。
そこを晒しなよ。

それと、ヒアドキュメント使った方がいいぞ。
0835nobodyさん03/06/04 22:28ID:???
ご、ごめんなさい。やっぱり出直してきますです。。。。
お邪魔シマスタ、、、、
0836室長03/06/04 22:28ID:???
本当にすみませんでした、、、
0837nobodyさん03/06/04 22:36ID:???
>>832
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print $ENV{'REMOTE_ADDR'};
083883403/06/04 22:41ID:???
>>835-836
おおぉ?
俺、そんな強い口調っぽい書き込みだった・・・?
俺が分かる範囲で付き合ってあげるから・・・・
逃げるこたぁないだろぉ〜
0839nobodyさん03/06/04 22:44ID:???
おいおい、別に逃げなくてもいいよ。

もしかして、ソースって>>832で全部だったりして……
まさかね。
0840nobodyさん03/06/04 22:46ID:???
>>838
つか、>>837が一撃で回答を出してるがな。

>>832 は、どっかのソースをパクってきたんじゃないのか?
んで、そのソースでsub getipとかが宣言されてたんだけど、
そこまではコピらなかったとか。
0841室長03/06/04 22:50ID:???
本当に申し訳ないです。。。
なんか漏れみたいなザコキャラ相手に申し訳ないです。。。

すみませんが後学のために、一つだけ教えていただければ幸いであります。。。
>>837さんのprint $ENV{'REMOTE_ADDR'}; という部分は何をしているのか教えていただけませんか?、、、
おいらの本の環境変数サンプルにもリモートホストの表示部分には
$host = $ENV{'REMOTE_HOST'};
と書いてあり、IPアドレスの部分は
$trueip = &getip;
と書いてありました。。。
やっぱり$ENVって重要だったのでしょうか、、、、
お手数おかけしますが、是非お願いいたします。。。

>>839さん
全部です。。。。。
0842室長03/06/04 22:53ID:???
>>840さん
パクってきました。。。
見ると最後の方にIPアドレスの判断部分として、
sub getip {
if(〜〜〜
っていうのがあったです
必要だったんですか。。。。

厨房でほんと恥ずかしいです。。。ごめんなさいです。。。
084383403/06/04 23:20ID:???
>>840
たしかに。
でも、>>832のソースでのバグ取りの質問でしょ。

>>841-842
おっかしな事言うヤツだな・・・
環境変数って言葉を知ってて、なぜ%ENVを知らない・・・?
%ENVが環境変数その物なんだが・・・

とにかく、まったく分かってない状態だな。
変に触って、レンタルサーバとかに上げるなよ・・・。
迷惑になるから。
最低、簡単な掲示板くらい作れるようになれ。
話はそれから。
0844室長03/06/04 23:23ID:???
>>843
そうだったですか。。。。
もっと勉強してから出直してきますです。
皆さん本当にありがとうございました。感謝です
お邪魔しましたです。。。
0845nobodyさん03/06/04 23:46ID:???
>>843
> 最低、簡単な掲示板くらい作れるようになれ。
> 話はそれから。

「初心者」って敷居高いのですねぇ、、、
0846nobodyさん03/06/04 23:49ID:???
while(($n,$v)=each(%ENV)) { print sprintf("%s = %s<br>\n",$n,v); } とかやると環境変数が何なのか掴みやすくなるかも
0847nobodyさん03/06/04 23:55ID:nAPG6l61
リファレンスについて学びはじめなのですが、

#!/usr/bin/perl
require "jcode.pl";
print "Content-type: text/html\n\n";

$list{sta_kanji} = "春日部";   #駅名を漢字で。
push (@list, \%list);

print $list[0]->{sta_kanji};   #スクリプトのコードがEUCなので、EUCで表示されます。
&jcode::convert(\$list[0]->{sta_kanji},'sjis');   #SJISに変換します
print $list[0]->{sta_kanji};   #SJISで表示されます

の最後の2行で、どうしてjcodeのときには「\」が必要で、
最後の行では\が不要なのでしょうか・・・?
要不要の違いはどこで判断するのでしょうか?
0848nobodyさん03/06/04 23:55ID:???
診断くん?
084983403/06/05 00:00ID:???
>>845
う〜ん?敷居高い?
俺が初めてPerlで作ったCGIって掲示板だったが・・・
本見ながら、必至で作った。
出来上がった掲示板は・・・
返信機能も、Cookieの機能も、改ページ機能も、
何の機能もない、ただ書き込んだ内容がズラズラ表示される掲示板だった・・・
掲示板と言うか、ゲストブックかな?
そこから、いろんな本買ったり、人のスクリプト読んだりで勉強したけど・・・

掲示板が基本だと思うけどね〜。俺は。
085083403/06/05 00:05ID:???
>>847
> $list{sta_kanji} = "春日部";   #駅名を漢字で
ここは、$list[0]->{sta_kanji} = "春日部"; の間違いか?

\が必要な時と、必要じゃ無い時は・・・
出力してみろ。

print \$list[0]->{sta_kanji};
print $list[0]->{sta_kanji};

二つの違いを見てみれば分かる。
0851nobodyさん03/06/05 00:08ID:???
簡単な掲示板を作れってのはちょっと酷だろ。
まずは他人の掲示板の改造から入るのがいいんじゃないか?
まぁ、大前提としてHTMLをわかってないといけないが。

あ、そうそう。
掲示板の改造とかなら改造スレで質問してね。
0852nobodyさん03/06/05 00:11ID:???
おれが初めてperlに触ったのは、minichatの改造だたーよ
0853nobodyさん03/06/05 00:15ID:???
cgiの基本は掲示板かもしれん
085483403/06/05 00:25ID:O0RMOoYP
print \$list[0]->{sta_kanji};
で、
SCALAR(0x80d55c8)
と出ましたが、わかりません(泣)
スカラー値ということでしょうが、
一体どこのスカラーを差しているのでしょうか?(変な日本語かな)

あと、0x80d55c8っていうのは、なんなんでしょうか?
ググろうかとも思いましたが、そもそもググる単語がわからず。。。
085584703/06/05 00:29ID:???
すいません、>>854 において、名前欄を書き間違えました。ただしくは >>847でした。

あと、
>>850 さん
>> $list{sta_kanji} = "春日部";   #駅名を漢字で
>ここは、$list[0]->{sta_kanji} = "春日部"; の間違いか?
いえ、間違いというか、その直後にpush (@list, \%list);してるので。
(@listと%listがややこしかったですね、すいません)
0856nobodyさん03/06/05 00:29ID:???
何でもそうだけど、目標があるのとそうでないのとでは、やっぱり意識が違う。
掲示板って、作ったあとそのまま使えるし、プログラム的にも簡単な部類だし
おそらく世の中にあるCGIでは最も数が多いだろうから、参考にするコードも多い。
Perlを覚える教材としては一番ふさわしいと思う。

そういう俺も、最初は掲示板の改造→自作→その他のCGI、という流れで覚えた。

>>854
それは変数の内容があるアドレス。そこにスカラー値が入ってる。
ぐぐるなら「デリファレンス」。
(本来はリファレンスなんだけど、それだと無関係なほうがいっぱい引っかかるんで)
0857nobodyさん03/06/05 00:34ID:???
>>847
sub sub1
{
my $a = shift;
$a = 2;
}
$a = 1;
sub1($a);
print "$a\n";

sub sub1
{
my $a = shift;
$$a = 2;
}
$a = 1;
sub1(\$a);
print "$a\n";
を比べて見やがれ。
085883403/06/05 00:41ID:???
>>851-853
そっか、みんな改造から入ったのか〜。
プログラム入門がPerlだった俺は、死ぬ思いだった・・・

ちなみに、CGIの基本は掲示板だと俺も思う。
Perl/CGIができるヤツに、掲示板作らせたら一発でレベルが分かる。

>>855
見落とししてた・・・。スマン
ちなみに、答えは>>856が答えてる通りで、
メモリ内の、スカラー値が格納されてる番地を表す。
Cのポインター相当。
0859nobodyさん03/06/05 00:47ID:???
俺はCGI以前からサーバプログラム作ってたからいかにサーバに負担かけないかという
習性が身についてたのね。minibbs見たときはぶっ飛んだよ。
0860nobodyさん03/06/05 01:34ID:???
>>849
同意

>>851
改造の方が難しくないか?(改造ってHTMLいじるとかそんなんじゃないよね?)
それに1から順を追って作った方が理解できると思う。
0861nobodyさん03/06/05 01:41ID:???
>860
改造ったって、BBSの入力項目一つ増やすだけだって立派な改造でしょ。
それなら簡単だし、変数とかにも触れて、案外入門としてはいいかもとか思ってる。

tu-ka,俺がそうだった。
1から順を追って作ろうとすると挫ける性格なんだよ。
大体、そういうやり方で覚えられる奴はこんなところで質問しない。
0862nobodyさん03/06/05 01:44ID:???
そういうやり方 = 1から順を追って作るやり方、ね。
0863nobodyさん03/06/05 02:24ID:???
>>861
>BBSの入力項目一つ増やすだけ
って言ってもCGIの入力・処理・出力を全てやらなきゃいけないから辛いと思うんだがなあ。
1から作る方だと、まず出力、次に入力したやつを出力、最後に入力した奴を処理して出力
と段階を追っていけるから理解が早いのではないかと。
改造の方だと一応改造に成功しても、結局中でどういう処理がされているかが分からないし。

俺はプログラマの講師をやっていた頃があって、その経験からこういう結論になってる。
CGIに関しては数回に渡って100人ぐらいに教えたけど、改造させるより1から作らせる方が飲み込み早かったよ。

まぁ個人差があるから全員がそうというわけではなかったから、このように意見が分かれるんだろうな。
0864nobodyさん03/06/05 02:33ID:???
>>854
んー、jcode::convertの内部の動きを見てないので想像だけど、
内部的にデリファレンスされた値を受け取って処理できないんじゃないかな。
jcode::convertに特有の仕様だと思うなぁ。

リファレンスについては、
http://www.namazu.org/~tsuchiya/perl/info/perl-ja_toc.html#TOC86
ここを読むといいかも。(結構難しいけどね)
オライリージャパンから出てる「プログラミングPerl」が手元にあるなら
ひたすら「リファレンスとネストされたデータ構造」の章を読む。

ぐぐるときは「ハードリファレンス」「シンボリックリファレンス」なんて
キーワードを使ってみるといいかも。
0865nobodyさん03/06/05 02:38ID:???
>>861
俺は逆に、「人の作ったものの改造」が苦手だ。
(悪い例かもしれないけど)某K○NTのBBSスクリプトとか
拾ってきて、さていじろうと思っても、
どこがどこの処理をしてるのかサパーリわからん。
今にして思えば、変数のスコープがぐちゃぐちゃしてたから
わかりにくかったんだろうけどね。

掲示板で勉強していくなら、「この掲示板と同じものを自分で作ろう」
っていうのが一番いいと思うな。
改ページとか、どうやるんだろうって処理は既存のものを参考にして、
あとは自分の手で書いたほうが結局は理解が早い。

あと、モジュール使うと非常に勉強になるね。
使い方をマスターするために必要な知識がたくさんあるから
結果としてそういうものも身に付いていく。
0866nobodyさん03/06/05 02:48ID:???
cgilib.plとかCGI.pmとかだけは最初に使わない方がいいな。
基礎(%ENV,QUERY_STRING,PATH_INFO,type="file",etc.)を身に付けるためにも。
結局は外部モジュール使うようになる(し、そうすべきだ)けど、
この辺の遠回りは無駄にはならないと思うし。
>>865は分かってるだろうけど一応。
■ このスレッドは過去ログ倉庫に格納されています