トップページ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
0521nobodyさん03/05/28 18:53ID:???
>>519
山崎渉は透明あぼ〜んに登録して桶
0522nobodyさん03/05/28 19:24ID:uwixhF+z
文章の1行目から3行目までを指定して
改行を取り除きたいのですが、
どのようにすればいいのでしょうか?
改行を取り除くのは
$body =~ s/\n//g;
これでできるのですが、
$bodyの中の1行目から3行目までだけの
改行を取り除きたいと思っています。
0523nobodyさん03/05/28 19:46ID:???
>>522
@bodys = split (/\n/, $body);
chomp ($body[0], $body[1], $body[2]);

いくら初心者のためのスレだと言っても、
最低基礎くらい覚えてこい!
052452303/05/28 19:51ID:???
@bodys = split (/\n/, $body);
@head = splice (@bodys, 0, 3);
$body = join ("\n", @bodys);

スマン、俺も、ちゃんと勉強しておく。。。
0525nobodyさん03/05/28 20:15ID:+jnsOx/q
>>523
はぁ?じゃマジ初心者はどこいったらいいのよ?
お前スレタイ読んで出直してこいや(w
052652503/05/28 20:16ID:???
すまねぇ・・・ちゃんと過去ログ読むわ・・・
0527nobodyさん03/05/28 20:29ID:uwixhF+z
>>523

ありがとう。
でも配列使えないんですよ。
ポインタみたいな物使ってるので。
$body_item->{'body'}
これの中身の最初の\nから3つ目の\nまで消したいんです。
0528nobodyさん03/05/28 20:31ID:uwixhF+z
あとstrict使っているのでグローバル変数は使えないんです。
0529_03/05/28 20:32ID:???
http://homepage.mac.com/hiroyuki43/hankaku01.html
0530nobodyさん03/05/28 20:37ID:???
ヨクワカランケド
for($i=0; $i<3; $i++){
  $body_item->{'body'}[$i] =~ s/\n//g;
}
0531nobodyさん03/05/28 20:38ID:???
>>528
use vars
0532nobodyさん03/05/28 20:44ID:uwixhF+z
>>530
>531
ありがとう
use vars

for($i=0; $i<3; $i++){
  $body_item->{'body'}[$i] =~ s/\n//g;
}
Unrecognized character \x81 at user_lib/xxxx/xxx.pm line 198.
というエラーが出ます。
0533nobodyさん03/05/28 20:46ID:???
しるかぼけ!
198行目がなんなのかもわからんのに
0534nobodyさん03/05/28 20:49ID:uwixhF+z

use vars
@body_item->{'body'} = split (/\n/, $body_item->{'body'});
@head = splice (@body_item->{'body'}, 0, 3);
$body_item->{'body'} = join ("\n", @body_item->{'body'});
これだと

Global symbol "@body_item" requires explicit package name at user_lub/xxx/xxx.pm line 196

このようなエラーが出ます。
0535nobodyさん03/05/28 20:49ID:???
\x81 。。。。
0536nobodyさん03/05/28 20:54ID:uwixhF+z
ただ先頭から3つの\nを取り除くだけも結構大変ですね。
0537nobodyさん03/05/28 20:57ID:???
>>534
馬鹿なのか回答者をおちょくっているのか・・・
0538nobodyさん03/05/28 20:58ID:C2cSB0SK
ここのせいでオナニーしすぎだよまったく・・・
         ↓

 http://www.dvd-yuis.com/index2.html
0539nobodyさん03/05/28 20:58ID:uwixhF+z
>>537
全然おちょくってないです。
本当に困ってるんですよ。
0540nobodyさん03/05/28 21:00ID:uwixhF+z
何か他に案はないでしょうか?
0541nobodyさん03/05/28 21:01ID:uwixhF+z
substr使っても駄目だったし本当にどうすればいいんだろう・・・
0542nobodyさん03/05/28 21:05ID:???
>>539
use vars ここにグローバル変数にしたい変数を羅列;

use vars qw($a @b %c);という感じで。
0543動画直リン03/05/28 21:10ID:52+C0e9R
http://homepage.mac.com/hitomi18/
0544nobodyさん03/05/28 21:12ID:uwixhF+z
>>542
ありがとう

use vars qw(@body_item->{'body'},@head);
@body_item->{'body'} = split (/\n/, $body_item->{'body'});
@head = splice (@body_item->{'body'}, 0, 3);
$body_item->{'body'} = join ("\n", @body_item->{'body'});


これだと
@body_item->{'body'},@head' is not a valid variable name under strict vars at user_lub/xxxx/xxx.pm line 196
こういうエラーが出ます。
054552303/05/28 21:15ID:???
>>533
ワラタ
0546nobodyさん03/05/28 21:15ID:???
うわー。名前消し忘れてるし〜。
0547nobodyさん03/05/28 21:15ID:???
>use vars qw(@body_item->{'body'},@head);

カンマ区切りじゃなくて、半角スペース区切りだろ
0548nobodyさん03/05/28 21:18ID:???
>>544
@head = splice (@{$body_item->{'body'}}, 0, 3);
0549nobodyさん03/05/28 21:18ID:uwixhF+z
>>547
半角スペースでも試しましたが駄目でした。
0550nobodyさん03/05/28 21:20ID:???
use vars qw(@body_item @head);
@{$body_item->{'body'}} = split (/\n/, @{$body_item->{'body'}});
@head = splice (@{$body_item->{'body'}}, 0, 3);
$body_item->{'body'} = join ("\n", @{$body_item->{'body'}});

いっぱい間違ってないかい?
0551nobodyさん03/05/28 21:20ID:???
use vars qw(@body_item @head);だと思うんだが。
055255003/05/28 21:22ID:???
あ、最後の行
$body_item->{'body'} = join ("\n", @{$body_item->{'body'}});

@{$body_item->{'body'} = join ("\n", @{$body_item->{'body}});
変更。
0553nobodyさん03/05/28 21:22ID:uwixhF+z
>>548
ありがとう
これだと
use vars qw(@body_item->{'body'} @head);
@body_item->{'body'} = split (/\n/, $body_item->{'body'});
@head = splice (@{$body_item->{'body'}}, 0, 3);
$body_item->{'body'} = join ("\n", @body_item->{'body'});

こういうエラーが出ます。
Type of arg 1 to splice must be array (not hash element) at user_lub/xxxx/xxx.pm line 199, near "3)"
055455003/05/28 21:23ID:???
>>553

>>550>>552
0555nobodyさん03/05/28 21:23ID:???
>>522
1行目から3行目までを取り込み、全ての改行コードを削除してから残りの行を付け加えるのでは駄目なのか?
055655003/05/28 21:24ID:???
>>555
俺も最初に思ったが、どしてもスカラー変数から改行を取り除きたいらしい。
0557nobodyさん03/05/28 21:25ID:???
>>556
そうか(^_^;)
で、配列も使いたくないらしいから、split+joinもだめなのね。
0558nobodyさん03/05/28 21:26ID:uwixhF+z
>>551
それだと
Bad name after body' at user_lub/xxxx/xxx.pm line 209.
というエラーが出ます。
055955003/05/28 21:27ID:???
>>557
いや、厳密には配列に入ってるんだよ。
それが、リファレンスで入ってるんで、ちょっと扱いがわかってないっぽい。
要領は同じなんだけどね〜・・・

って、雑談ぽくなってきたので、これにて。
056055003/05/28 21:28ID:???
>>558
もういい・・・。
すべてのソースを晒せ。
0561nobodyさん03/05/28 21:28ID:uwixhF+z
>>552
こうすると

'@body_item->{'body'}' is not a valid variable name under strict vars at user_lub/xxxx/xxx.pm line 196
このようなエラーが出ます。
0562nobodyさん03/05/28 21:29ID:???
>>561
それ、ちゃんと変更できてない。
ソース晒せって。全部。
圧縮して、アプローダ。
0563nobodyさん03/05/28 21:30ID:uwixhF+z
>>555
それは出来ないんですよ。ソースが膨大でDatabase使ってますから。
0564nobodyさん03/05/28 21:31ID:???
>>563
掲示板で教えるのは限界がある。
・・・とにかく、@body_item->{'body'}ってのを、@{$body_item->{'body'}} へ、ちゃんと変更する。
全部。
0565nobodyさん03/05/28 21:34ID:???
>>563
って言うか、そのエラー出てるモジュールだけを晒してくれれば早い。
0566nobodyさん03/05/28 21:38ID:uwixhF+z
>>565
pakage使ってますから横の繋がりもあるんですよ。
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>
■ このスレッドは過去ログ倉庫に格納されています