Perl 初心者コーナー Part23
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/05/16 11:18ID:zDRBc/j4【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
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
0567nobodyさん
03/05/28 21:39ID:???それでもいいから。
エラーは、そのモジュール局部的な物と見てる。
それとも、晒せないソースなのか?
今のペースだと、スレ1つ消化するくらい説明のやり取りが必要になるぞ。
0568nobodyさん
03/05/28 21:40ID:???だったら、196行目だけ晒せばいいだろ!
0570nobodyさん
03/05/28 21:41ID:uwixhF+z分かりました。
もうちょっとやって駄目ならそこの部分のソースを2chアップローダに
上げます。
0572nobodyさん
03/05/28 21:43ID:uwixhF+z196行目は
my $body;
です。
0574nobodyさん
03/05/28 21:55ID:???0576nobodyさん
03/05/28 22:02ID:???$text = 'abc';
$regex = qr/$text/;
これでいいだろ?
んで、表示する時は$text使えばいいんじゃねーか。
0577nobodyさん
03/05/28 22:04ID:???0578nobodyさん
03/05/28 22:09ID:uwixhF+z完璧です。
それで完璧に出来ました。
ありがとうございます。
0579nobodyさん
03/05/28 22:16ID:uwixhF+zどこでそのような方法を勉強したのでしょうか?
perlのリファレンス見てもそのような表現方法は載ってなかったので
どうやって勉強したのか気になります。
0581nobodyさん
03/05/28 22:23ID:uwixhF+zそうですか。
人のソースで勉強したのですか。
人の書いたソースでも、あの表現方法を理解するのは
私には難解です。
まだまだ勉強が足りないですね。
0582nobodyさん
03/05/28 22:27ID:uwixhF+zちなみにこれについて教えていただきたいのですが、
$1$2$3というのは変数だと思いますが、strict内で変数宣言しなくても
エラーが出ませんでした。どうしてなのでしょうか?
普通は my $1;などと変数宣言しないといけないはずですが。
0583nobodyさん
03/05/28 22:37ID:???http://www.google.com/search?num=100&hl=ja&ie=UTF-8&oe=UTF-8&as_qdr=all&q=Perl+%E7%89%B9%E6%AE%8A%E5%A4%89%E6%95%B0+%241&lr=lang_ja
0584nobodyさん
03/05/28 22:42ID:???0585nobodyさん
03/05/28 22:44ID:???0586nobodyさん
03/05/28 22:47ID:uwixhF+z特殊変数だったのですね。
$n
最後に一致した正規表現内の()グループに相当する部分文字列が設定されるのですね。
正規表現を勉強しないといけませんね。
0587nobodyさん
03/05/28 22:58ID:uwixhF+z0588nobodyさん
03/05/28 23:14ID:???これもゆとり教育の弊害か。
0589nobodyさん
03/05/28 23:20ID:???0590nobodyさん
03/05/28 23:41ID:???こんな香具師、いつもならスルーなのに今日はどうした?
0591nobodyさん
03/05/28 23:53ID:???$body =~ s/\n//;
$body =~ s/\n//;
完璧だ!
0592nobodyさん
03/05/29 00:08ID:NXYitVzp構うなよバカを
0593nobodyさん
03/05/29 00:23ID:QV3HKWcehttp://homepage3.nifty.com/coco-nut/
ここ(σ ̄ω ̄)σ神がいます
http://jbbs.shitaraba.com/computer/2364/
0594nobodyさん
03/05/29 00:58ID:???0596nobodyさん
03/05/29 10:45ID:m7OaXWdv0597nobodyさん
03/05/29 10:56ID:OM7vlSMS2,SIBUYA
3,SHINJYUKU
という3行のCSVファイル「house.csv」があって、
それをHTML::Templateモジュール の<TMPL_LOOP>を使って表示させたいのですが、
いかんせん、リファレンスのことが理解できず(通算15時間以上読んでいるのですが(泣))、
やり方がわかりません。どのようにすればいいのでしょうか?
open(IN, "< house.csv");
while ($line = <IN>){
chomp $line;
$values = split(/,/, $line);
#不明箇所その1($values[0]、$values[1])をどうすりゃいいか
}
#--------------------------------------------------------------------
# HTMLテンプレートをオープン
my $template = HTML::Template->new(filename => './tmpl/search_result.html');
# パラメータを埋める
$template->param(SEARCH_RESULT => [
{ id => '1', station => 'UENO' },
{ id => '2', station => 'SIBUYA' },
{ id => '3', station => 'SHINJYUKU' },
#不明箇所その2
#今は、ここを、直接idとstationを書いているが、これを、
#CSVファイルからもってきた値に変えたい
]
);
あと、リファレンスについて、猿でもわかる解説ってないでしょうか・・・?
0598bloom
03/05/29 11:10ID:AQrs4zcG0599nobodyさん
03/05/29 11:51ID:???0600nobodyさん
03/05/29 11:54ID:???なぜ、ラクダ本を薦めるのかがわからん。
たしかに最強の本だが、ラクダ本で理解するのは難しいだろ。
ある程度分かってからなら、さらに深く理解できると思うけど。
お勧めは、「新Perlの国へようこそ」
俺は、これでリファレンス&オブジェクトを勉強した。
0601nobodyさん
03/05/29 12:00ID:e3PaTXyE十分と思われ。
まあ漏れもラクダ本は好きじゃないけど、これくらい買う気にならないと
どうせやっても頓挫するよ、くらいの目安にはなると思う。
ちなみに漏れは「初めてのPerl」みたいなタイトルの本買って勉強しますた。
0602_
03/05/29 12:01ID:???0603nobodyさん
03/05/29 12:18ID:???入門もリファレンスもネット上で足りるよな。
それでも理解不能な超初心者向けの本というと何だろう。
もはやPerl以前のところから説明してそうだけど。
0604597
03/05/29 12:34ID:???おれが一番読んでいるのは、その「新Perlの国へようこそ」です・・・
やばいのかな、おれって
いや、リファレンス以外はらいたい、その本で理解できたつもりなんですけどね
0605nobodyさん
03/05/29 14:19ID:???0606nobodyさん
03/05/29 14:42ID:???0607nobodyさん
03/05/29 14:59ID:hW1BfWjcを使ってダウンロードさせるプログラムがあって、
そいつをNetScape7でダウンロードさせると、ファイル名のケツに.cgiがつくんです。
対処方法はありますか?
0608nobodyさん
03/05/29 15:10ID:f7DLEcKaそれともパール?
どうなのYOー
0609nobodyさん
03/05/29 15:17ID:???まぁ、俺は駱駝本は欲しいなと思ってはいるけど、
入門段階で本を買ったら覚えれるという発想も安直だと思うのだが如何だろう?
0610nobodyさん
03/05/29 15:41ID:???0611nobodyさん
03/05/29 15:49ID:???0612nobodyさん
03/05/29 15:51ID:5xhJzi5fいちおうNet::SSLeayというモジュールが必要ということで
ppm install Nea::SSLeay としてやってみたもののうまくできません。
どうすればよいでしょうか?
perl初心者ですが申し訳ありません。
0613nobodyさん
03/05/29 17:15ID:???0614nobodyさん
03/05/29 17:48ID:???らくだ本を読めば理解できる人が全てというわけでは無いんだから、少し配慮しよう。
0615nobodyさん
03/05/29 17:50ID:???質問の内容がアホすぎる奴が多い。
いかにも「とりあえず聞いてます」みたいな奴。
ちったあ調べて来い! ってんだ。
0617nobodyさん
03/05/29 22:00ID:???考えるとあんま安くないな...。
あ、簡単なperlの本は読んだんですけど必要ないですかね?
掲示板とか作るところでつまずいたんで買おうと思ってるんですけど。
0618nobodyさん
03/05/29 22:03ID:???あ、スレ違いでした。すいません。
0619nobodyさん
03/05/29 23:22ID:RP1Tv8fKよければ教えて下さい。検索に出なかったもので、、
0620nobodyさん
03/05/30 00:11ID:???http://www.google.com/search?num=50&hl=ja&ie=Shift_JIS&q=Socket+perl&lr=lang_ja
ちゃんと調べたのか・・・。
検索したら、山ほど引っかかるが?
これ、全部読んでもダメなら本探しに行くがよろし。
0621sample
03/05/30 02:10ID:nd3Sm/eFmy @list;
open(IN, "house.csv");
while (<IN>){
chomp;
my ($id, $station) = split /,/;
my %list;
$list{id} = $id;
$list{station} = $station;
push @list, $%list;
}
my $template = HTML::Template->new(filename => './tmpl/search_result.html');
$template->param(
LIST => \@list
);
search_result.htmlの該当部分例
<TABLE>
<TMPL_LOOP NAME="LIST">
<TR><TD><TMPL_VAR NAME="id"></TD><TD><TMPL_VAR NAME="station"></TD></TR>
</TMPL_LOOP>
</TABLE>
0622nobodyさん
03/05/30 02:15ID:???http://www.atmarkit.co.jp/fpc/slotsocket/indexpage/
0623597
03/05/30 02:28ID:???なぜ、
14-16行目は
$template->param(
LIST => \@list
);
10行目は
push @list, $%list;なのでしょうか?
つまり、どうして、push @list, \%list でないのでしょうか?
0625_
03/05/30 02:42ID:???0627直リン
03/05/30 03:10ID:KvuUHxNV0628nobodyさん
03/05/30 03:11ID:k5B8Isn5(key=aaa&key=bbbのように)
同じキーの値が複数ある場合、何で分割されているのでしょうか?
CGI.pmは同じキーの場合、配列にして戻ってくるらしいのですが、
見たところ配列でもないし、何で分けられているのかさっぱり分かりません・・。
0630nobodyさん
03/05/30 03:22ID:/oIAPWL0普通にconnect関数を使えばいいのでしょうか?
調べてみましたがどこにも書いてなかったのでお願いします。
0631nobodyさん
03/05/30 11:03ID:MqvbgP4I$hoge[0]じゃないといけないのに、@hoge[0]でもOKだったんですけどなぜですかね
0632直リン
03/05/30 11:10ID:KvuUHxNV0633nobodyさん
03/05/30 11:25ID:wqqbPD7W$salt = $logpw =~ /^\$1\$(.*)\$/ && $1 || substr($logpw, 0, 2); #aska.cgiのある一行です
関数的な意味ではなく文法的な意味が。&&や||がどの部分にかかっているかとかがいまいちわかりません。
分解したり()つけたりどなたか分かりやすく説明していただけないでしょうか。
0634nobodyさん
03/05/30 11:39ID:???$salt = (($logpw =~ /^\$1\$(.*)\$/) && $1) || substr($logpw, 0, 2);
パターンマッチが成功したら→ $salt = $1
失敗したら → $salt = substr($logpw, 0, 2)
違ってたらすまん
0635nobodyさん
03/05/30 11:44ID:???それはね〜。
スライスと言ってね〜
$はスカラー変数として評価されて、
@は配列として評価されるんだよ〜。
たとえばね〜。
配列の要素0と3と6をコピーしたいとするよね〜。
@hoge = ($hage[0], $hoge[3], $hoge[6]);
↑これだと、ちょっと面倒だよね〜。
@hoge = @hage[0, 3, 6];
↑これだと、すっきりして見えるよね。
スライスって便利だね〜。
マジ、本読もうね〜。
0636635
03/05/30 11:45ID:???ここの所、ちょっと変数名間違っちゃったけど、
言いたいこと分かってくれるよね〜?
0637nobodyさん
03/05/30 11:48ID:???>どこかのホームページでUDPもconnectできると書いてあるんですが・・・
へー。どこかのホームページにそんな事書いてたのか〜。
>調べてみましたがどこにも書いてなかったのでお願いします。
へー。どこにも書いてなかったのか〜。
・・・( ´_ゝ`)ヘー
0638nobodyさん
03/05/30 11:55ID:???それで合ってるっぽ。
$salt = ($logpw =~ /^\$1\$(.*)\$/ ? $1 : substr($logpw, 0, 2) );
こう書いた方が、まだ分かりやすい・・・
0640630
03/05/30 14:51ID:qOosOO5S失礼しました。
どこかのホームページではなく、とあるホームページです。
自分なりにconnect関数について調べたのですが、udpを使用しての使い方は載ってませんでしたので…。
0641nobodyさん
03/05/30 14:58ID:???いや、そういう意味じゃなく、
その「どこかのホームページ」に書いてたなら、
その「どこかのホームページ」内に、説明がなかったのかね?って意味。
ちょっと、ひねくった言い方してみた。
0643630
03/05/30 15:11ID:uU/3TkKVudpでconnectとか書いてあるんですけど、どこにそれが書いてあるのやら…。
当方の見落としですかね?
0644630
03/05/30 15:12ID:qOosOO5S>>642
>>642のサイトです。
udpでconnectとか書いてあるんですけど、どこにそれが書いてあるのやら…。
当方の見落としですかね?
0645630
03/05/30 15:13ID:gys3ZHK80646nobodyさん
03/05/30 15:58ID:tzfB9BhB日記CGIを借りてきて、自分で設定を様々に変更しました。
ローカルのテストで成功しましたので、Web上にアップしましたが、CGIにアクセスしようとしたところ、「500 Internal Server Error」と出てしまいました。
日記のフォルダ内は
index.html
バックナンバー用フォルダ
cgi-binフォルダ┬●●.cgi
├データ保存用フォルダ
└HTML生成用テンプレート
となっており、それぞれのフォルダのパーミッションは777、●●.cgiのパーミッションは755に設定しました。
Perlのパスは、!/usr/local/bin/perl です。
あまりに初心者の質問で申し訳ありませんが、
1:500 Internal Server Errorとは、どういうエラーなのでしょうか。
2:こういう場合、どこを修正すれば良いのでしょうか。パーミッションが悪いのか、パスが悪いのか、それともアップロードの仕方が悪いのか、もっと他に原因があるのでしょうか。
よろしくお願いします。
0647nobodyさん
03/05/30 16:47ID:???ローカルってWin?
ローカルで動くならperlの文法は合ってるんだろうね。
どっかで初歩的なミスしてると思うよ。
ま、スレ違いなので、
http://pc2.2ch.net/test/read.cgi/php/1048686475/l50
↑こちらへどうぞ。
0648nobodyさん
03/05/30 18:30ID:axvQjxfE0650nobodyさん
03/05/30 19:09ID:???モノが足らない。他に3つぐらい必要
>>628
CGI::Applicationは内部でCGI.pmを使ってるから処理は同じ。
>>643
UDPでconnectってのは単に宛先を省略できるようになるだけ。
実際にコネクトしてるわけじゃない。
0651nobodyさん
03/05/30 19:36ID:???0652_
03/05/30 19:41ID:???0653nobodyさん
03/05/30 20:14ID:???連想配列Aと連想配列Bがある場合、AにBをコピーさせたいのですが、
コピーする際にキーの重複を避ける為にBのキーに固定文字を追加して
移動させるにはどのように書けば良いのか教えて下さい。
配列の場合にはそのままpushで簡単だったのですが…
0655nobodyさん
03/05/30 22:04ID:v3ScOAWpを
%b = (1_b => "a",2_b => "b")
ってことじゃねーの?
0656nobodyさん
03/05/30 22:45ID:???0657653
03/05/30 23:01ID:???すみません。
>>655の解釈の通りです。
連想配列の解説を読みあさって、自分でも作ってみました。
while (($key, $value) = each(%B)) {
$A{"b_$key"} = $value;
}}
一応、期待通りに動いてはくれているのですが、
もう少しスッキリ書けないものかと思いまして。
これが最善の用法ですかね?
0658nobodyさん
03/05/30 23:11ID:v3ScOAWp<!--#exec cgi="./acslog.cgi" -->でアクセスされたときと、
http://aaa.net/acslog.cgiでアクセスされたときを分岐したいのですが、
無理ですか?
0659658
03/05/30 23:13ID:v3ScOAWp適当ですのでお気にしないでください。
0660nobodyさん
03/05/30 23:38ID:TYAZIilihttp://homepage3.nifty.com/coco-nut/
http://www.k-514.com/
0661nobodyさん
03/05/30 23:52ID:???それでできるなら、それでいいんじゃない?
俺なら・・・
while (($key, $value) = each(%B)) {
$key .= '_b';
$A{$key} = $value;
}
こうするけどね。
>>658
あのさ・・・
本当に教えてほしいなら、ちゃんと質問しようよ・・・
何を質問したいのか?って所から考えちゃったよ・・・
HTMLに埋め込んでるSSIで呼び出されたCGIファイルの実行結果と、
CGIファイル直接アクセスされた時の実行結果を変えたいって事でしょ?
SSIで呼び出す時は、GETで情報埋め込んでおいたらどう?
0662nobodyさん
03/05/30 23:56ID:???@A{ map "b_$_", keys %B } = values %B;
>>658-659
その質問は CGI 関係のスレへ振ってくれ。
あとコレ読んで。
http://www.goto.info.kanagawa-u.ac.jp/~horiyuki/rfc/rfc2606j.txt
0663653
03/05/31 01:29ID:???なるほど、そっちの方が後で読んだ時にわかりやすいですね。
ありがとうございます。
>>622
すごい。
そこまで端折れるものだったとは。
状況によって、>>661さんと>>662さんの構文を使い分けていきたいと思います。
ありがとうございました。
0664658
03/05/31 01:30ID:6mtQ8nNeSSIでacslog.cgi?aaa
とかしても意味ないんじゃないですか?
?つけても、execで実行すると.cgiで実行した結果になるんですが・・・・
0665nobodyさん
03/05/31 02:13ID:???0666nobodyさん
03/05/31 02:55ID:???・・・ヘ?
GETで値送って、その値見て処理を変えるんだよ?
直接CGIにアクセスされても、GETで値送らない限り処理変えられると思うが・・・?
とりあえず、>>665の言う通りスレ違いだから、これ以上はCGI質問板へ。
■ このスレッドは過去ログ倉庫に格納されています