トップページ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
0567nobodyさん03/05/28 21:39ID:???
>>566
それでもいいから。
エラーは、そのモジュール局部的な物と見てる。
それとも、晒せないソースなのか?
今のペースだと、スレ1つ消化するくらい説明のやり取りが必要になるぞ。
0568nobodyさん03/05/28 21:40ID:???
at user_lub/xxxx/xxx.pm line 196
だったら、196行目だけ晒せばいいだろ!
0569nobodyさん03/05/28 21:41ID:???
>>563に違和感を覚える。

ソースって読み込み元のことか?
0570nobodyさん03/05/28 21:41ID:uwixhF+z
>>567
分かりました。
もうちょっとやって駄目ならそこの部分のソースを2chアップローダに
上げます。
0571nobodyさん03/05/28 21:41ID:???
>>568
196行目のエラーが無くなったら、別の行でエラーが出る罠。
0572nobodyさん03/05/28 21:43ID:uwixhF+z
>>568
196行目は
my $body;
です。
0573nobodyさん03/05/28 21:44ID:???
>>572
(T-T)(T-T)(T-T)(T-T)(T-T)(T-T)
0574nobodyさん03/05/28 21:55ID:???
$str =~ s/^(.*?)\n(.*?)\n(.*?)\n/$1$2$3/;
0575nobodyさん03/05/28 22:00ID:???
>>495
LWPモジュールでググれ。
0576nobodyさん03/05/28 22:02ID:???
>>517
$text = 'abc';
$regex = qr/$text/;

これでいいだろ?
んで、表示する時は$text使えばいいんじゃねーか。
0577nobodyさん03/05/28 22:04ID:???
Perl、何か宇宙語のようで読むのが大変ですw
0578nobodyさん03/05/28 22:09ID:uwixhF+z
>>574
完璧です。
それで完璧に出来ました。
ありがとうございます。
0579nobodyさん03/05/28 22:16ID:uwixhF+z
>>574
どこでそのような方法を勉強したのでしょうか?
perlのリファレンス見てもそのような表現方法は載ってなかったので
どうやって勉強したのか気になります。
0580nobodyさん03/05/28 22:18ID:???
>>579
処理のアルゴリズム。
勉強したけりゃ、人が書いたソース読め。
0581nobodyさん03/05/28 22:23ID:uwixhF+z
>>580
そうですか。
人のソースで勉強したのですか。
人の書いたソースでも、あの表現方法を理解するのは
私には難解です。
まだまだ勉強が足りないですね。
0582nobodyさん03/05/28 22:27ID:uwixhF+z
$str =~ s/^(.*?)\n(.*?)\n(.*?)\n/$1$2$3/;

ちなみにこれについて教えていただきたいのですが、
$1$2$3というのは変数だと思いますが、strict内で変数宣言しなくても
エラーが出ませんでした。どうしてなのでしょうか?
普通は my $1;などと変数宣言しないといけないはずですが。
0583nobodyさん03/05/28 22:37ID:???
>582
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:???
てゆーか、正規表現知らずにPerlやってるのが信じられんのだが
0585nobodyさん03/05/28 22:44ID:???
「〜はずですが」←これが多いねぇ〜
0586nobodyさん03/05/28 22:47ID:uwixhF+z
>>583
特殊変数だったのですね。
$n
最後に一致した正規表現内の()グループに相当する部分文字列が設定されるのですね。

正規表現を勉強しないといけませんね。
0587nobodyさん03/05/28 22:58ID:uwixhF+z
何はともあれ、ありがとうございました。
0588nobodyさん03/05/28 23:14ID:???
教科書に載っている以上のことができないっつーのも、なんかアレだな。
これもゆとり教育の弊害か。
0589nobodyさん03/05/28 23:20ID:???
つーか正規表現載ってないperlのリファレンスってなんだ?
0590nobodyさん03/05/28 23:41ID:???
いきなりレスが増えたから荒されたのかと思ったよ。山崎
こんな香具師、いつもならスルーなのに今日はどうした?
0591nobodyさん03/05/28 23:53ID:???
$body =~ s/\n//;
$body =~ s/\n//;
$body =~ s/\n//;

完璧だ!
0592nobodyさん03/05/29 00:08ID:NXYitVzp
バカは放置しないと直らない

構うなよバカを
0593nobodyさん03/05/29 00:23ID:QV3HKWce
ここ(σ ̄ω ̄)σいいじゃん
http://homepage3.nifty.com/coco-nut/
ここ(σ ̄ω ̄)σ神がいます
http://jbbs.shitaraba.com/computer/2364/
0594nobodyさん03/05/29 00:58ID:???
バカのお祭りみたい
0595nobodyさん03/05/29 01:57ID:???
>>574
>>578
くそぉぉ!!
祭りに乗り遅れた!!
面白そうな祭りしてたんだな・・・

しっかし・・・ひどいな(w
0596nobodyさん03/05/29 10:45ID:m7OaXWdv
だって初心者スレだもん
0597nobodyさん03/05/29 10:56ID:OM7vlSMS
1,UENO
2,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ファイルからもってきた値に変えたい
  ]
);
あと、リファレンスについて、猿でもわかる解説ってないでしょうか・・・?
0598bloom03/05/29 11:10ID:AQrs4zcG
http://homepage.mac.com/ayaya16/
0599nobodyさん03/05/29 11:51ID:???
くだらないことで一日悩んでるくらいなら、らくだ本買いなよ。
0600nobodyさん03/05/29 11:54ID:???
>>599
なぜ、ラクダ本を薦めるのかがわからん。
たしかに最強の本だが、ラクダ本で理解するのは難しいだろ。
ある程度分かってからなら、さらに深く理解できると思うけど。

お勧めは、「新Perlの国へようこそ」
俺は、これでリファレンス&オブジェクトを勉強した。
0601nobodyさん03/05/29 12:00ID:e3PaTXyE
そこまで言い切ってしまうなら、本なんて買わずにそこら辺のサイトで
十分と思われ。
まあ漏れもラクダ本は好きじゃないけど、これくらい買う気にならないと
どうせやっても頓挫するよ、くらいの目安にはなると思う。

ちなみに漏れは「初めてのPerl」みたいなタイトルの本買って勉強しますた。
0602_03/05/29 12:01ID:???
http://homepage.mac.com/hiroyuki43/hankaku01.html
0603nobodyさん03/05/29 12:18ID:???
より高度なスクリプトを書きたい、と思い立つまでは、
入門もリファレンスもネット上で足りるよな。

それでも理解不能な超初心者向けの本というと何だろう。
もはやPerl以前のところから説明してそうだけど。
060459703/05/29 12:34ID:???
>>600
おれが一番読んでいるのは、その「新Perlの国へようこそ」です・・・
やばいのかな、おれって
いや、リファレンス以外はらいたい、その本で理解できたつもりなんですけどね
0605nobodyさん03/05/29 14:19ID:???
ソ ー ス 嫁 。
0606nobodyさん03/05/29 14:42ID:???
良質なソースキボンヌ
0607nobodyさん03/05/29 14:59ID:hW1BfWjc
Content-Disposition: attachment; filename=name.xxx;\r\n
を使ってダウンロードさせるプログラムがあって、
そいつをNetScape7でダウンロードさせると、ファイル名のケツに.cgiがつくんです。
対処方法はありますか?
0608nobodyさん03/05/29 15:10ID:f7DLEcKa
perlってペールって読むの?
それともパール?
どうなのYOー
0609nobodyさん 03/05/29 15:17ID:???
>>608 pearlを最初使おうとしてたらしいからパールでいいんで無かろうか?

まぁ、俺は駱駝本は欲しいなと思ってはいるけど、
入門段階で本を買ったら覚えれるという発想も安直だと思うのだが如何だろう?
0610nobodyさん03/05/29 15:41ID:???
ペールです
0611nobodyさん03/05/29 15:49ID:???
ベッケンバウアーです
0612nobodyさん03/05/29 15:51ID:5xhJzi5f
Activeperlでsslのかかったサイトにアクセスしたいのですがどうすればよいでしょうか?

いちおうNet::SSLeayというモジュールが必要ということで
ppm install Nea::SSLeay としてやってみたもののうまくできません。
どうすればよいでしょうか?

perl初心者ですが申し訳ありません。
0613nobodyさん03/05/29 17:15ID:???
perlは ぱるる。urlは うるるだ。
0614nobodyさん03/05/29 17:48ID:???
とにかく問題は、潜在的な理解能力には差があるということ。

らくだ本を読めば理解できる人が全てというわけでは無いんだから、少し配慮しよう。
0615nobodyさん03/05/29 17:50ID:???
潜在的ってか、やる気の問題だろ。
質問の内容がアホすぎる奴が多い。
いかにも「とりあえず聞いてます」みたいな奴。

ちったあ調べて来い! ってんだ。
0616nobodyさん03/05/29 21:40ID:???
>>603
Perl以前っていうか、
Perlの開発者の説明やPerlの元々の意味が載ってた本なら見た事ある
0617nobodyさん03/05/29 22:00ID:???
すぐわかるperlが200円で買える。。。でも送料、振込み金
考えるとあんま安くないな...。
あ、簡単なperlの本は読んだんですけど必要ないですかね?
掲示板とか作るところでつまずいたんで買おうと思ってるんですけど。
0618nobodyさん03/05/29 22:03ID:???
↑↑↑
あ、スレ違いでした。すいません。
0619nobodyさん03/05/29 23:22ID:RP1Tv8fK
Socketについて1から詳しく教えてる優良なサイトってありますか?
よければ教えて下さい。検索に出なかったもので、、
0620nobodyさん03/05/30 00:11ID:???
>>619
http://www.google.com/search?num=50&hl=ja&ie=Shift_JIS&q=Socket+perl&lr=lang_ja
ちゃんと調べたのか・・・。
検索したら、山ほど引っかかるが?
これ、全部読んでもダメなら本探しに行くがよろし。
0621sample03/05/30 02:10ID:nd3Sm/eF
>>597
my @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:???
>>619
http://www.atmarkit.co.jp/fpc/slotsocket/indexpage/
062359703/05/30 02:28ID:???
すいません、
なぜ、
14-16行目は
$template->param(
  LIST => \@list
);

10行目は
push @list, $%list;なのでしょうか?

つまり、どうして、push @list, \%list でないのでしょうか?
062459703/05/30 02:29ID:???
言い忘れましたが、
>>623 は、
>>621 さんへの引用&返信として書きました。
0625_03/05/30 02:42ID:???
http://homepage.mac.com/hiroyuki43/hankaku10.html
062662103/05/30 02:50ID:???
>>623
単純な入力ミスだ、ぐらい判ってくれ。
push @list, \%list;
0627直リン03/05/30 03:10ID:KvuUHxNV
http://homepage.mac.com/yuuka20/
0628nobodyさん03/05/30 03:11ID:k5B8Isn5
CGI::Applicationでフォームのパラメータを受け取った時
(key=aaa&key=bbbのように)
同じキーの値が複数ある場合、何で分割されているのでしょうか?
CGI.pmは同じキーの場合、配列にして戻ってくるらしいのですが、
見たところ配列でもないし、何で分けられているのかさっぱり分かりません・・。
062962303/05/30 03:17ID:???
>>626
あ、なんだ、すいません。ほっとした。
0630nobodyさん03/05/30 03:22ID:/oIAPWL0
どこかのホームページでUDPもconnectできると書いてあるんですが、どうやるんでしょうか?
普通にconnect関数を使えばいいのでしょうか?
調べてみましたがどこにも書いてなかったのでお願いします。
0631nobodyさん03/05/30 11:03ID:MqvbgP4I
配列にアクセスする時は、
$hoge[0]じゃないといけないのに、@hoge[0]でもOKだったんですけどなぜですかね
0632直リン03/05/30 11:10ID:KvuUHxNV
http://homepage.mac.com/yuuka20/
0633nobodyさん03/05/30 11:25ID:wqqbPD7W
色々なスクリプトを参考にPerlを学び始めたのですが↓の意味がわかりません。
$salt = $logpw =~ /^\$1\$(.*)\$/ && $1 || substr($logpw, 0, 2); #aska.cgiのある一行です
関数的な意味ではなく文法的な意味が。&&や||がどの部分にかかっているかとかがいまいちわかりません。
分解したり()つけたりどなたか分かりやすく説明していただけないでしょうか。
0634nobodyさん03/05/30 11:39ID:???
>>633
$salt = (($logpw =~ /^\$1\$(.*)\$/) && $1) || substr($logpw, 0, 2);
パターンマッチが成功したら→ $salt = $1
失敗したら           → $salt = substr($logpw, 0, 2)

違ってたらすまん
0635nobodyさん03/05/30 11:44ID:???
>>631
それはね〜。
スライスと言ってね〜
$はスカラー変数として評価されて、
@は配列として評価されるんだよ〜。

たとえばね〜。
配列の要素0と3と6をコピーしたいとするよね〜。

@hoge = ($hage[0], $hoge[3], $hoge[6]);

↑これだと、ちょっと面倒だよね〜。

@hoge = @hage[0, 3, 6];

↑これだと、すっきりして見えるよね。
スライスって便利だね〜。

マジ、本読もうね〜。
063663503/05/30 11:45ID:???
>@hoge = ($hage[0], $hoge[3], $hoge[6]);
ここの所、ちょっと変数名間違っちゃったけど、
言いたいこと分かってくれるよね〜?
0637nobodyさん03/05/30 11:48ID:???
>>630
>どこかのホームページでUDPもconnectできると書いてあるんですが・・・
へー。どこかのホームページにそんな事書いてたのか〜。

>調べてみましたがどこにも書いてなかったのでお願いします。
へー。どこにも書いてなかったのか〜。


・・・( ´_ゝ`)ヘー
0638nobodyさん03/05/30 11:55ID:???
>>634
それで合ってるっぽ。

$salt = ($logpw =~ /^\$1\$(.*)\$/ ? $1 : substr($logpw, 0, 2) );

こう書いた方が、まだ分かりやすい・・・
0639nobodyさん03/05/30 12:04ID:???
>>634
>>638
ありがとうございます。無事理解できました。
064063003/05/30 14:51ID:qOosOO5S
>>637
失礼しました。
どこかのホームページではなく、とあるホームページです。

自分なりにconnect関数について調べたのですが、udpを使用しての使い方は載ってませんでしたので…。
0641nobodyさん03/05/30 14:58ID:???
>>640
いや、そういう意味じゃなく、
その「どこかのホームページ」に書いてたなら、
その「どこかのホームページ」内に、説明がなかったのかね?って意味。

ちょっと、ひねくった言い方してみた。
0642nobodyさん03/05/30 15:03ID:???
>>640
ttp://x68000.startshop.co.jp/~68user/net/udp-2.html

この辺とか?
064363003/05/30 15:11ID:uU/3TkKV
>>642まさにそこです。
udpでconnectとか書いてあるんですけど、どこにそれが書いてあるのやら…。

当方の見落としですかね?
064463003/05/30 15:12ID:qOosOO5S
>>641
>>642

>>642のサイトです。
udpでconnectとか書いてあるんですけど、どこにそれが書いてあるのやら…。

当方の見落としですかね?
064563003/05/30 15:13ID:gys3ZHK8
二重カキコスマソ。
0646nobodyさん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:???
>>646
ローカルってWin?
ローカルで動くならperlの文法は合ってるんだろうね。
どっかで初歩的なミスしてると思うよ。
ま、スレ違いなので、
http://pc2.2ch.net/test/read.cgi/php/1048686475/l50
↑こちらへどうぞ。
0648nobodyさん03/05/30 18:30ID:axvQjxfE
文字列の行番号を調べる方法はないですか?
0649nobodyさん03/05/30 19:06ID:???
>>604
新Perlの国へようこそで十分リファレンスは理解できるぞ?
0650nobodyさん03/05/30 19:09ID:???
>>612
モノが足らない。他に3つぐらい必要

>>628
CGI::Applicationは内部でCGI.pmを使ってるから処理は同じ。

>>643
UDPでconnectってのは単に宛先を省略できるようになるだけ。
実際にコネクトしてるわけじゃない。
0651nobodyさん03/05/30 19:36ID:???
age
0652_03/05/30 19:41ID:???
http://homepage.mac.com/hiroyuki43/hankaku10.html
0653nobodyさん03/05/30 20:14ID:???
お聞きします。
連想配列Aと連想配列Bがある場合、AにBをコピーさせたいのですが、
コピーする際にキーの重複を避ける為にBのキーに固定文字を追加して
移動させるにはどのように書けば良いのか教えて下さい。

配列の場合にはそのままpushで簡単だったのですが…
0654nobodyさん03/05/30 21:59ID:???
>>653
「固定文字を追加」ってのがちょっと意味不明。解説キボンヌ
0655nobodyさん03/05/30 22:04ID:v3ScOAWp
%a = ( 1 => "a",2 => "b")

%b = (1_b => "a",2_b => "b")
ってことじゃねーの?
0656nobodyさん03/05/30 22:45ID:???
The duct tape of the internetってなんすか?
065765303/05/30 23:01ID:???
>>654
すみません。
>>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でアクセスされたときを分岐したいのですが、
無理ですか?
065965803/05/30 23:13ID:v3ScOAWp
aaa.netってほんとにあるのかよ。・。・・
適当ですのでお気にしないでください。
0660nobodyさん03/05/30 23:38ID:TYAZIili
o((=゜♀゜=))oどうだ〜?
http://homepage3.nifty.com/coco-nut/

http://www.k-514.com/
0661nobodyさん03/05/30 23:52ID:???
>>657
それでできるなら、それでいいんじゃない?
俺なら・・・

while (($key, $value) = each(%B)) {
  $key .= '_b';
  $A{$key} = $value;
}

こうするけどね。

>>658
あのさ・・・
本当に教えてほしいなら、ちゃんと質問しようよ・・・
何を質問したいのか?って所から考えちゃったよ・・・

HTMLに埋め込んでるSSIで呼び出されたCGIファイルの実行結果と、
CGIファイル直接アクセスされた時の実行結果を変えたいって事でしょ?

SSIで呼び出す時は、GETで情報埋め込んでおいたらどう?
0662nobodyさん03/05/30 23:56ID:???
>>657
@A{ map "b_$_", keys %B } = values %B;

>>658-659
その質問は CGI 関係のスレへ振ってくれ。
あとコレ読んで。
http://www.goto.info.kanagawa-u.ac.jp/~horiyuki/rfc/rfc2606j.txt
066365303/05/31 01:29ID:???
>>661
なるほど、そっちの方が後で読んだ時にわかりやすいですね。
ありがとうございます。

>>622
すごい。
そこまで端折れるものだったとは。

状況によって、>>661さんと>>662さんの構文を使い分けていきたいと思います。

ありがとうございました。
066465803/05/31 01:30ID:6mtQ8nNe
>>661
SSIでacslog.cgi?aaa
とかしても意味ないんじゃないですか?
?つけても、execで実行すると.cgiで実行した結果になるんですが・・・・
0665nobodyさん03/05/31 02:13ID:???
激しくスレ違い
0666nobodyさん03/05/31 02:55ID:???
>>664
・・・ヘ?
GETで値送って、その値見て処理を変えるんだよ?
直接CGIにアクセスされても、GETで値送らない限り処理変えられると思うが・・・?
とりあえず、>>665の言う通りスレ違いだから、これ以上はCGI質問板へ。
■ このスレッドは過去ログ倉庫に格納されています