トップページ⇒php
981コメント390KB

くだすれPerl(超初心者用)2

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/03/03(月) 05:07:32ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Perl使いが優しくコメントを返しますが、
お礼はPerlの布教と初心者の救済をお願いします。
0002nobodyさん2008/03/03(月) 12:33:59ID:???
テンプレとかないの?
0003nobodyさん2008/03/03(月) 19:13:48ID:???
>>0
あ?ほんとに分かってんのか?
「はい」ってのはな「はい、わかりました」を略して「はい」なんだよ
頭だけでわかったって言わねんだぞ?学校の勉強じゃねえんだから
社会では?お?実際に出来て初めて「わかった」言うんだ
出来もしねえ奴が軽々しくはいなんて言うんじゃねえよ
お?聴こえてんのかよコラ?あ?
やる気がねえんだったら来なくていいぞ?
お前ナメてんだろコラ?
仕事中だと思って優しく口で言ってりゃ調子に乗んじゃねえぞコラ?お?
外で遭ってたら今頃カタワだぞお前?とっくに
0004nobodyさん2008/03/03(月) 22:02:10ID:F1EuYZlD
なんだ、この馬鹿?
ケツの三行が間抜けすぎるんだけどw
0005nobodyさん2008/03/07(金) 19:19:52ID:???
とにかく、画像とか抜きにしてテキストベースでじゃんけんゲームとか数当てゲームを作ってみれば良い。
とりあえず機能的には、繰り返し挑戦出来るとか残り回数があるとか。
○○より小さいです。 って表示させたりだ。

そうすることで 判定・繰り返し・変数を大まかに理解出来るだろう。
0006nobodyさん2008/03/13(木) 15:16:54ID:???
どのバージョンをDLしたらいいのかわかりません(WIN)
0007nobodyさん2008/03/13(木) 21:47:41ID:vk+XUs64
掲示板でデータを逆順に表示するリンクをつけたいのですが
reverse リスト 
をリンクとしてできるようにするにはどのようにしたらいいのでしょうか?
具体的には<a href=???>古い順</a>
といったリンクをつけたいです
0008nobodyさん2008/03/14(金) 00:10:56ID:jE/64EXv
$aaa=1;
if($aaa==1||$aaa==3)
これをもっと簡潔に書く方法がわかりません。

もうひとつ、
$aaaが8nなら、というのはどうやればよいのでしょうか。
調べてもわかりませんでした、おねがいしますm(_ _)m
0009nobodyさん2008/03/14(金) 01:46:19ID:sSfBLQ5N
>>7
リストをreverseさせるルーチンはあるのか?
だったらそこにジャンプさせる為の判別用の文字列をqueryで送ってやれば良し

>>8
これ直前で$aaaに1を代入してれば3になる可能性は皆無なんじゃないか?
$aaa==3 は必要無いだろ

if($aaa eq '8n')
これを調べても分からないんじゃヤバいぞ
0010nobodyさん2008/03/14(金) 01:49:59ID:sSfBLQ5N
8n って文字列かと思ったじゃねぇか
あとマルチポストは控えめに
0011nobodyさん2008/03/14(金) 11:05:45ID:tA8hqU0W
正規表現で>>1というようにアンカーが付くとリンクされるというのは出来たのですが、>>1のように単体でログを表示するやり方が分かりませんm(_ _)m
0012nobodyさん2008/03/14(金) 13:36:44ID:???
先生∩

sub uniq    #重複行削除
{
  my %seen;
  return (grep { ! $seen{$_}++ } @_);
}
sub uniqu    #1回のみの行
{
  my %seen;
  $seen{$_}++ for @_;
  return (grep { $seen{$_} == 1 } @_);
}

な感じの物を見つけたのですが、何が起きてるかさっぱり解りません。
そこで質問です。
以下は2行以上あるものだけの出力になるっぽいのですが、合ってるでしょうか?
sub uniqd
{
  my %seen;
  return (grep { $seen{$_}++ == 1 } @_);
}
0013nobodyさん2008/03/14(金) 18:49:24ID:???
>>11
アンカー先のURLで記事を表示できるようにする必要ががある。
例えば<a href="./bbs.cgi?No=100">100</a>とするなら、
No100の記事をファイルから取得して表示する。

>>12
foreach(@_)としてるのと同じ感じで、配列の各値が$_に一時的に格納される。
んで{}内で$seen{$_}に1を代入してるわけ。
ハッシュのキーは重複しないので++でカウントできる。おk?

この際ついでにgrepとmapについて勉強したほうがいい。
Perlの中でも強力な部類の関数だから
0014nobodyさん2008/03/14(金) 19:17:40ID:???
>>12
暇だから、、、
最後の質問は正解。

一番上の grep BLOCK の中だけ解説。
1. $seen{$_} で %seen に $_ が登録されてるかどうか調べる。
 当然最初の一回目は無いから偽。二回目以降は真。
2. ! によって1.の条件が偽の時のみ真。
3. ++ によって $_ を %seen に登録。(++によって数値と見なされ偽を0と
 解釈。で普通に1足される)。
4. 1. に戻るが、同じ物が二回目に出てくると真、なので 2. の条件に
 当てはまらない。
結果、 uniq なもののみがトラップされる。

uniqu はまあ論外。uniqd は ++ の挙動さえ理解してれば問題ない。
( $seen{$_} == 1 が解釈された後に $seen{$_} に1が足される。
ちなみに ++ $seen{$_} == 1 は uniq と同じ挙動になる。)


 
0015nobodyさん2008/03/14(金) 20:49:41ID:???
>>13
有難う御座います
BLOCK部の$seen{$_}の動きが解りました
grepとmapですね、精進しますorz
どうもperlの配列マジックが苦手で…

>>14
詳細な解説有難う御座います!
BLOCK部の動作が解って来ました
今迄一行スクリプト見ても"凄い"で終っていましたが、
何が起きているか理解できる様にしたいと思います
0016nobodyさん2008/03/15(土) 01:02:29ID:bB5F1BkL
>>13
# アンカー表示
    if($FORM{'comment'} =~/>>(\d{1,4})/){
$no = $1
$DATA[$no]  = $ENV{'SCRIPT_NAME'}?no=$no
print "<a href=\"htttp://url&no=$no\">>>$no</a>";
といった感じでやってみたのですがうまくできません・・・
間違いだらけだと思いますが、何かとご指摘よろしくお願いします。
0017nobodyさん2008/03/15(土) 01:23:16ID:???
>>16
スクリプト自体に「no=123 を受け取ったら No.123 の記事だけを吐く」みたいな
機能が存在しないまま、アンカーのことばかり気にしてたりしないか。
0018nobodyさん2008/03/15(土) 03:38:52ID:???
LWPやXMLといったモジュールをフリー鯖で使用するにはどうすれば
0019nobodyさん2008/03/15(土) 12:35:24ID:q6rOizZS
>>18
pure perlなモジュールなら、自前の鯖にインスコされてる.pmファイルをうpすれば桶じゃね?
0020nobodyさん2008/03/17(月) 06:27:56ID:???
LWPって標準モジュールでなかったっけ?
XMLはモノによるけど有名どころはXPAT?必要だからインストール無しだと厳しい
0021nobodyさん2008/03/20(木) 15:51:16ID:+FD61Aq0
>>17
具体的にどのようにしたら良いのでしょうか?
0022nobodyさん2008/03/24(月) 12:00:22ID:/JLxXrtH
どこで質問してよいのかわからなかったのですが、
使うプログラムがPerlなので、こちらでさせて頂きます。

ウィンサーバーで、お問い合わせフォームを使おうと思っています。
http://www.winserver.ne.jp/

使うお問い合わせフォームは、「フォームメール」です。
http://www.rescue.ne.jp/cgi/webform/

以下のFAQをみると、「次のコードを記述下さい」とコードが
書いてありますが、どこに入れればよいのかわかりません。
http://www.winserver.ne.jp/faq/index.html#70

webform.cgiに入れればよいのかと確認しても、
「サポート外だから教えられない」と言われてしまいます。
webform.cgiに入れて試してみても、
「CGI Error
 The specified CGI application misbehaved
 by not returning a complete set of HTTP headers.」
と出てしまいます。

どうしたらよいのか、ご助力頂ければ幸いです。
0023nobodyさん2008/03/24(月) 14:22:47ID:???
エラーメッセージ見てまず何が原因かと思った?
そっから考えろ
0024nobodyさん2008/03/24(月) 15:00:22ID:???
そのコードは記述する必要がないんじゃないか?
0025222008/03/24(月) 15:26:00ID:???
>>23,24
CGI/Perlについては、設置程度はできるのですが、
それ以上はわからないのです・・・。
ウィンサーバーはパーミッションの設定はできないし、
>print "Content-type: text/html\n\n";
とあるので、とりあえずwebform.cgiの中で、
「Content-type」ああるところを上記の物に変更しても、
同じメッセージがでるしで・・・。
行き詰まっています。
0026nobodyさん2008/03/24(月) 15:35:26ID:???
webform.cgi の中の受信先メールアドレスを自分のアドレスに書き換えて設置するだけでは?
0027nobodyさん2008/03/24(月) 15:58:36ID:???
basp21 使えってサーバみたいだから sendmail(互換) 前提のスクリプトが
動くようにするのは「設置程度なら」の人にはきついと思う。
0028nobodyさん2008/03/24(月) 16:35:00ID:???
>>22
もう諦めて、無料のレンタルフォーム使ったら?fc2とかの
0029nobodyさん2008/03/26(水) 21:12:26ID:???
Talk2chを参考にしてSOCKETを使い、スレのDATを取得したんですが、
取得したものを変数に格納する方法が分かりません

print SOCKET "GET /PC11.2ch.net/dat/10000000.dat HTTP/1.0\r\n";

↑こんな感じです
0030242008/03/26(水) 21:14:23ID:YxQEkSzy
ID忘れてました
スイマセン
0031292008/03/26(水) 21:15:27ID:YxQEkSzy
29でしたorz
0032nobodyさん2008/03/26(水) 21:27:35ID:???
既視感が。

>>29
http://pc11.2ch.net/test/read.cgi/tech/1199977642/737 (738が俺)
向こうで続けてもいいと思うんだけど。
0033nobodyさん2008/03/27(木) 06:27:10ID:17ssUCBE
>>32
低レベルすぎると思って
0034nobodyさん2008/04/03(木) 16:38:03ID:n0FZOeJi
会社で、サブルーチンの中でグローバル変数?($_とか)を
使わんほうがいいということで、
print &gokei('山田<>1','菊池<>2','田中<>3');

sub gokei{
  local @lines = @_; local $gokei =0;
  foreach(@lines){
    my ($name,$pt) = split(/<>/,$_);#もしくはsplit(/<>/);
    $gokei += $pt;
  }
  return $gokei;
}
ってやってたのを軒並み
foreach my $line(@lines){
〜 = split(/<>/,$line);
〜;
}
に変更されちゃったんですが、そういうものなんですか?
なんかいろんなところで不便なんですが…。
0035nobodyさん2008/04/03(木) 16:51:17ID:???
プログラムの流れとか関係ない処理とかなら$_使ってもいいと思うけどなぁ
省略したほうが読みやすいときも個人的にいっぱいあるし

他のPerlをあまり使わない人のためじゃない?

あと、my変数と違ってlocal変数は本当はグローバル変数だよ
0036342008/04/03(木) 17:34:30ID:???
返事ありがとうございます。
$_が出てくるときは長々と複数行引きずる事はないですから、
害はないとは思うんですが・・・。

あと、上記ならまだいいんですが、
$yamadacount = grep((split(/<>/,$_))[0] eq '山田',@lines);
みたいな使い方してる場合はもうどうした物やら…
0037nobodyさん2008/04/03(木) 17:34:52ID:???
>>34
それよりも local @lines =@_ , (略) のが変。
$pt もグローバルだし。
perl4 時代のプログラム書くなよ。

まあ、$_ に関しては 35氏と同意見だけど、コーディング規約なら仕方ない部分はある。
(が、上記の理由により、貴社のコーディング規約が時代に則ったものとは判断しがたい。)

真相は、スパゲティをみかねた上司が手を入れちゃったって所じゃねえの?
0038nobodyさん2008/04/03(木) 19:35:33ID:???
失礼、$pt はグローバルじゃなかった、orz...
あと、()の行は「(が、仮に規約があったとしても、…」って書いたつもりだった。
>>36
$yamadacount
  = grep{
   my $line = $_ ;
   ( my $name, undef ) = split /<>/, $line ;
   $name eq '山田' } @lines ;

後、それを $_ を用いて書くなら(エンコーディングの話しは抜きにして)
$yamadacount = grep /^山田<>/, @lines ;
なりなんなりもっとすっきりしたコードが書けるんじゃね?
0039nobodyさん2008/04/03(木) 20:07:16ID:???
名前も付けなくていいし。
0040nobodyさん2008/04/03(木) 20:17:54ID:???
foreachループの制御変数( デフォルトで$_ )は使った後もとの状態に戻されるよ
0041342008/04/04(金) 10:01:42ID:???
いろいろ返事ありがとうございます。
さきほど以下のような形でまわしてみたところ、
@aaa = ('a','b','c');@bbb = ('A','B','C');
$_ = "HELLO";
foreach(@aaa){
  foreach(@bbb){
    print;
  }
  print;
}
print;
結果は'ABCDaABCDbABCDcABCDdHELLO'となりました。
ということはやっぱり>>40さんの言うとおり少なくとも
foreachで用いる$_は別段問題ないって事ですよねえ。
$_に直接何か入れる事なんてあんまりないですし。
もうちょっといろいろ試して勉強してみます。。
0042nobodyさん2008/04/04(金) 12:31:56ID:???
2種類のファイル(それぞれ複数あります)から必要部分を抽出して
リンク付きリスト作成したいのですがよろしくお願いします
perlで使う命令の意味もわからないレベルです(できれば丸投げ希望です)

1種目:htmlから抽出したい箇所
・<title>文字列</title> #1行構成
・<title xml:lang="ja" lang="ja">
文字列</title> #2行構成
・【住所】文字列 #1行の時と備考があって2行で構成されているファイルがある
・【TEL】半角数字で電話番号-ハイフン付き(03-3333-XXXX)10桁構成もしくは携帯(090-1234-XXXX)11桁構成

2種目:TXTから抽出したい箇所
<アピール>文字列<アピール>
約200文字〜300文字が改行無しに記載されている場合と
改行ありで2行から構成されている場合があります

★抽出したファイル名の一覧は<a href c:\test\list\ファイル名 </a>でリンク付き一覧
一覧表の構成(ソートは<title>の昇順)一覧表は.htmlで保存したいです

・<title>(htmlから抽出)
・【住所】(htmlから抽出)
・【TEL】(htmlから抽出)
・リンク付きでファイルネーム(htmlから抽出)
・<アピール>(TXTから抽出)
・リンク付きでファイルネーム(TXTから抽出)

それぞれの種類で複数あるファイルから上記部分を抽出して1枚の一覧表作成が目標です
どなたかよろしくお願い致します
0043nobodyさん2008/04/04(金) 12:58:40ID:???
丸投げスレ池
0044nobodyさん2008/04/04(金) 20:30:27ID:???
>>42です
>>43さん丸投げスレってあるのですか
私にピッタシのスレだ^^;
探してみるねお邪魔しましたノシ
0045nobodyさん2008/04/05(土) 13:15:12ID:???
こんにちは>>42です
丸投げスレを探したのですが既にあるスクリプトを改造するスレでした
私は改造とはちょっと違うのでこちらで勉強させてくださいお願いします
2枚のファイルから1枚にするより1枚の2箇所からのほうがいいかと思い結合させました
質問内容が>>42から変更します申し訳ないです

1枚のhtmlから異なる箇所にある複数行を読み込んで別ファイルを作る方法を教えて下さい
-------------------------------------
<h1>今日も晴れハレ^^</h1>
<h2>お友達を募集する</h2>
<h3>はじめまして<br>
元気だけがとりえの私です<br>
よろしくね</h3>
<h4>今日のラッキーカラーは黄色</h4>
-------------------------------------
<h1>〜</h1>と<h3>〜</h3>(複数行にまたがってる)の2箇所を読み込んで
読み込んだ部分だけ別のファイルに書き込んで保存したい(ファイルは新規作成)

部分的にでもアドバイスお願いできないでしょうか?
特に<h1>〜</h1>を読み込んだ後、離れた箇所にある<h3>〜</h3>の複数行を読み込ませる部分お願いしたいです
どなたかよろしくお願いします


0046nobodyさん2008/04/05(土) 13:22:57ID:???
>>45
while (<>){
 next if !( /<h1>/i .. /<\/h3>/i ) ;
 print ;
}
h3 が二箇所あるとかだったら知らん
0047nobodyさん2008/04/05(土) 13:31:19ID:???
ああ、思いっきし間違えた。
h1 と h3 だけ抽出したいのね。
while(<>){
 next if !( /<h[13]>/i .. /<\/h[13]>/i ) ;
 print ;
}
こっちだわ
0048nobodyさん2008/04/05(土) 14:40:16ID:???
>>45
ついでに

use strict;
my $joined = join "", <>;
my @matches = $joined =~ m{(<h[13]>.*?</h[13]>)}isg;
print map "$_\n", @matches;

でなったけど

リャマ本から省略して書くと
htmlみたいなマークアップ言語には多くの落とし穴があるから単純なパターンは使わずそれ用のモジュールを入手したほうがいいらしい。
0049nobodyさん2008/04/05(土) 15:04:15ID:???
>>46->>48
お忙しい中、レスありがとうです
>>45です
もしタグ名が違う場合はどう書けばよいでしょうか?
例にあげた文ではサーチする文字列のkeyは2箇所とも<h>ですが
<h>と<span>の2種類の場合はどうすればいいですか
丸投げですねすいません恐縮です

>>48のそれ用のモジュールってあるんですか
もしよろしければこちらも教えて下さい
何度もお手数をお掛けして申し訳ないです
0050nobodyさん2008/04/05(土) 16:02:34ID:???
>>49
use strict;
my $joined = join "", <>;
my @matches = $joined =~ m{(<h\d>.*?</h\d>|<span>.*?</span>)}isg;
print map "$_\n", @matches;

モジュールは探したけどわからんかった。すまん
それと、書いといて難なんだが勉強不足で>>47さんのコードがよく分からないけど
こっちのコードだと、でかいファイルを処理するときにjoinで全部繋げてからやってるから
たぶん、>>47さんのコードより表示するのが遅くなる
キーボード打つ回数も多くなるし
0051nobodyさん2008/04/05(土) 16:21:20ID:???
お世話になります>>45です
早速教えていただいたことを取り入れようとしてみたのですが
上手くいきませんでした

2種類あるタグは変数も2つに分けたほうがいいのでしょうか?
格納の仕方を教えて下さい

my $fileに<h1>〜</h1>を格納
my $file2に<span>〜</span>(複数行にわたる)を格納

2つの変数が格納された後
$file と $file2 の2つの変数をmy @files取り入れるのはどうすればいいですか
ハッシュは%linksとしたいです

書き込む時の事も2つになればどうすればいいのか?よくわかっていません
foreach my $file (sort keys %links) { print FH qq|\t<li><a href="$file">$links{$file}</a></li>\n| }
foreach my $file2 (sort keys %links) { print FH qq|\t<li>$file2</li>\n| }
でいいのか変数格納できていないので確かめていないです
どなたかよろしくお願い致します

0052nobodyさん2008/04/05(土) 16:24:30ID:???
>>50さん
>>45です
私が書き込む寸前にレスしてくれたんですね
入れ違いになってしまい申し訳ないです
(ソースを見ながら書くと遅くなってしまいました)
>>50さんに教えていただいたようにパイプを使ってやる方法を模索してみます
ありがとうございます
0053nobodyさん2008/04/05(土) 16:33:54ID:???
>>52
パイプは使ってないよ
m{(<h\d>.*?</h\d>|<span>.*?</span>)}isg
の縦棒(|)は右側か左側どっちかにマッチするようにしてるだけ
それと、このコードは
<span><span></span></span>とか入れ子になってると<span><span></span>にマッチしちゃう
正規表現の部分のコードのはてな(?)を取り除くと<span>aaa</span>……<span>bbb</span>のようになってるとき<span>aaa</span>……<span>bbb</span>にマッチしちゃう

だから、やっぱり書いておいて難なんだけどこのコードはおすすめできない
0054nobodyさん2008/04/05(土) 16:37:59ID:???
>>50さん
>>45です
my @files = glob("$dir*.html");
globでファイル名を配列として
そのあと
foreach my $file (@files) {
としてファイルを1つづつ読んでいます
ファイルの中が1箇所の時は大丈夫だったんですが
2箇所になると難しくなって困っています(例で言うと<h1>の部分と<span>の部分です)
アドバイス頂ければ嬉しいです
よろしくお願い致します
何度もすいません
0055nobodyさん2008/04/05(土) 16:42:14ID:???
>>50
モジュールは (HT|X)ML::Parser とか。
正規表現だけではネストに出くわしたときに「落とし穴」にはまる、と。

そのコード書ける人が>>47さんのが把握できないってのが腑に落ちんのだけど
どこが謎なの?

>>45
http://pc11.2ch.net/test/read.cgi/php/1203935151/277 かつ
http://pc11.2ch.net/test/read.cgi/hp/1205922529/50 な者ですが。
↑こんなやっつけ仕事を使い回そうとせずに「きちんと丸投げ」してくださいな。
自分より腕のいい人はたくさんいるから、暇つぶしで相手してくれるかもしれないし。

でも正直、あなたは丸投げ && 仕変連発を平気でなさるので業者に依頼して欲しい。
0056nobodyさん2008/04/05(土) 16:46:38ID:???
>>53さん
詳しくありがとうございます
>>45です
右か左かを選ぶって意味ですね
そうすると最長一致って事で<h1>の下にある<span>ばかりを選ぶことになりますね
どうすればいいのか・・・
ちょっと頭冷やして再考してみます
ありがとうございました
お返事頂けてよかったです
0057nobodyさん2008/04/05(土) 17:10:33ID:???
>>55さん
お世話になります
コーディング初心者スレで場所が違うと指摘を受けて自分が質問させてもらえるところを捜していたので
あなたとお会いできるとは思わなかったです
書いてくれた人にもう一度聞きたかったんだけど
みんなに迷惑だと言っていたのであなたに聞けなかったんですよ
また教えていただけないでしょうか?
お願いします
先のレスで書いたように別々のところ2箇所から取り出さなければいけない事がわかりました
以前お話したようにファイルリストを作りたいのですが
タイトルの下にもう1行ありました
タイトルにファイル名のリンクその下に1行書かなければいけなかったんです
もしよろしければお時間のある時にでもまた教えて下さい
お願い致します
0058nobodyさん2008/04/05(土) 17:13:24ID:???
>>55
なるほど。ありがとうございます

「/<h[13]>/i .. /<\/h[13]>/i」の部分が分かりません
$_に対してマッチしようとして真か偽を返すというのは分かるんですが範囲指定演算子がどういう役割をしてるか分からないです

>>56
何もできずにすまん
やっぱり>>55さんが紹介してくれたようなモジュールを使ったほうがいいよ
0059nobodyさん2008/04/05(土) 17:46:59ID:???
>>57
うーん、仕変が激しすぎるので…仕事だったら請けてるんでしょうけど。
とりあえず
http://pc11.2ch.net/test/read.cgi/php/1203935151/278
という声もあったので、ちと考えてみます。

>>58
そこの .. でしたか。

説明しようとするとウソを書きそうなので
perldoc perlop や
ttp://perldoc.jp/docs/perl/5.8.8/perlop.pod
の説明やサンプルを眺めてみてください。
0060nobodyさん2008/04/05(土) 18:14:08ID:???
>>59
すみません、perldocに目を通すのを忘れていました
コンテキストで役割が違うんですね
勉強になりました
本当にありがとうございました
0061nobodyさん2008/04/06(日) 14:25:12ID:???
こんにちは>>57です
>>59さんレスありがとうございます
わかりました
この先どんな問題が出てくるのか予想も出来ないので取り合えず自分でできるように頑張ってみます
2chで聞く時に「質問者は環境とやりたいことを出来るだけ詳しく」ということなので
やりたいことを詳しく書く、そしたら解答してくれる前に新しい問題点を発見して「質問内容を変更します」って繰り返してしまいました
解答してくれる方にはご迷惑をお掛けして反省しています
perlを始めて1週間、変数について勉強しているとこです
スカラ変数を2個にして配列変数0、1とすればいいのかなって思いました
それで正解なのかはわかりませんが取り合えずタイトル以外にもう1個スカラ変数を増やして読み書きできる事を目指してみます
ありがとうございました
0062nobodyさん2008/04/06(日) 22:29:28ID:nA18XPcw
perlの正規表現マッチングで、
htmlを読み込んだ$contentsから
<li>〜<li>の〜部分を抜き出したいと考えがえています。

for( my $i=1; $i <= 20; $i++){
if( $contents =~ m,^<li>(.*)</li>(.*),g ){
$block = $1;
$contents = $2;
}
}

この場合、i=1の時、
最後<li>のマッチングにかかる部分しか摘出できず、
うまい正規表現がないかと色々調べては回ったのですが、
ハマってしまいました。

$contensの初めからマッチングするようなコードを
ご教授お願いします。
0063472008/04/07(月) 07:06:59ID:???
誰向けでもなく一応のフォロー。 
my $cnt = 0 ;
while(<>){
 print $cnt . q{ } . $_ if $cnt != 0 or m{<span>}i ;
 $cnt += m{<span>}ig ;
 $cnt -= m{</span>}ig ;
}

>>62
my @res = $contents =~ m{<li>(.*?)</li>}gs ;

0064nobodyさん2008/04/07(月) 14:14:44ID:???
>>47さん
せっかく教えてくれたんだけど
今の私には理解できていないんだ(;´д⊂ヽ
後に参考になるかもしれないのでメモして大切に保存しておくよ
活用できなくて申し訳ない
ほんとにありがと
0065nobodyさん2008/04/07(月) 19:50:52ID:???
動画ファイル(youtube.flv)のハッシュ(SHA-1)を求める方法を教えてください。
0066652008/04/07(月) 20:57:10ID:???
あれからずっとググってやっと見つけました。
ありがとうございました。
0067nobodyさん2008/04/08(火) 00:48:13ID:???
perl/cgi逆引き大全600って本を1ページ目から読んでるんだけど
スカラと配列とハッシュがよくわかんない
スカラは値$
配列@は複数のスカラ値$
@があればスカラ変数$はいらないのでは?
@が複数のスカラ値と記載してあるんだけど
@へ複数の変数を入力する方法は記載されていないここが知りたいのに見当たらないね
最終的にソートする予定があればキーと値%のハュシュにしておいた方がいいのかな?
ソーと機能の所読んだらキーでソートするって書いてある
ハッシュをいくつも作って複数のハッシュを並べ替えてから書き込み
ってのが最終目標にすればいいのかな

39ページ目にして出てきたqwとはなんだろか??
目次にもTips検索にもない
ネットで調べたら
qw
シングルクォートで囲んだ文字列をスペースで split するのと同様です
命令を命令で説明しているところばかりだsplitってわかんない
splitを調べたsplitを使ってデータを分割と記載されている
・・・
qwはデータを分割するための命令なのか??
なんで日本語で解説しないんだ
先日もわかんない単語があった
ネットで調べたストリングと一緒と説明されていた
ストリング??ギターの弦か??ワケワカメ
0068nobodyさん2008/04/08(火) 05:45:29ID:???
Perlの前に日本語から勉強しなおせ
0069nobodyさん2008/04/08(火) 06:18:13ID:???
お前もな
0070nobodyさん2008/04/08(火) 06:31:50ID:???
ここが一番わかりやすかった
perlのアレコレ
ttp://furyo.on-air.ne.jp/linux/perl.html

私は10日ほど前からperlに興味を持ちお勉強してたんだよね
perl解説本3冊
ググルこと100サイト
初心者用ばかり選んでいるのにわかりにくいね

「簡単」「入門」「初級」で探してみるんだけど
中身は自分の思い出すためのメモ帳だね
全然わかんない
命令の説明に命令使って「入門」はないだろw
一般社会なら後進指導の立場には向いていないね
命令を説明するのに「○○はこんな感じです」と
その下にサンプル書いているだけではわかんね

私が選んだサイトは文脈からして10年くらいは経っているのではないかと思うがわかりやすいね
ヘンテコな広告も一切なくて集中して見れたな

「perlのアレコレ」管理人さんここを見ることはないかもしれないけど
ありがとう。
■ このスレッドは過去ログ倉庫に格納されています