くだすれPerl(超初心 ..
49:nobodyさん
08/04/05 15:04:15
>>46->>48
お忙しい中、レスありがとうです
>>45です
もしタグ名が違う場合はどう書けばよいでしょうか?
例にあげた文ではサーチする文字列のkeyは2箇所とも<h>ですが
<h>と<span>の2種類の場合はどうすればいいですか
丸投げですねすいません恐縮です
>>48のそれ用のモジュールってあるんですか
もしよろしければこちらも教えて下さい
何度もお手数をお掛けして申し訳ないです
50:nobodyさん
08/04/05 16:02:34
>>49
use strict;
my $joined = join "", <>;
my @matches = $joined =~ m{(<h\d>.*?</h\d>|<span>.*?</span>)}isg;
print map "$_\n", @matches;
モジュールは探したけどわからんかった。すまん
それと、書いといて難なんだが勉強不足で>>47さんのコードがよく分からないけど
こっちのコードだと、でかいファイルを処理するときにjoinで全部繋げてからやってるから
たぶん、>>47さんのコードより表示するのが遅くなる
キーボード打つ回数も多くなるし
51:nobodyさん
08/04/05 16:21:20
お世話になります>>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| }
でいいのか変数格納できていないので確かめていないです
どなたかよろしくお願い致します
52:nobodyさん
08/04/05 16:24:30
>>50さん
>>45です
私が書き込む寸前にレスしてくれたんですね
入れ違いになってしまい申し訳ないです
(ソースを見ながら書くと遅くなってしまいました)
>>50さんに教えていただいたようにパイプを使ってやる方法を模索してみます
ありがとうございます
53:nobodyさん
08/04/05 16:33:54
>>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>にマッチしちゃう
だから、やっぱり書いておいて難なんだけどこのコードはおすすめできない
54:nobodyさん
08/04/05 16:37:59
>>50さん
>>45です
my @files = glob("$dir*.html");
globでファイル名を配列として
そのあと
foreach my $file (@files) {
としてファイルを1つづつ読んでいます
ファイルの中が1箇所の時は大丈夫だったんですが
2箇所になると難しくなって困っています(例で言うと<h1>の部分と<span>の部分です)
アドバイス頂ければ嬉しいです
よろしくお願い致します
何度もすいません
55:nobodyさん
08/04/05 16:42:14
>>50
モジュールは (HT|X)ML::Parser とか。
正規表現だけではネストに出くわしたときに「落とし穴」にはまる、と。
そのコード書ける人が>>47さんのが把握できないってのが腑に落ちんのだけど
どこが謎なの?
>>45
スレリンク(php板:277番) かつ
スレリンク(hp板:50番) な者ですが。
↑こんなやっつけ仕事を使い回そうとせずに「きちんと丸投げ」してくださいな。
自分より腕のいい人はたくさんいるから、暇つぶしで相手してくれるかもしれないし。
でも正直、あなたは丸投げ && 仕変連発を平気でなさるので業者に依頼して欲しい。
56:nobodyさん
08/04/05 16:46:38
>>53さん
詳しくありがとうございます
>>45です
右か左かを選ぶって意味ですね
そうすると最長一致って事で<h1>の下にある<span>ばかりを選ぶことになりますね
どうすればいいのか・・・
ちょっと頭冷やして再考してみます
ありがとうございました
お返事頂けてよかったです
57:nobodyさん
08/04/05 17:10:33
>>55さん
お世話になります
コーディング初心者スレで場所が違うと指摘を受けて自分が質問させてもらえるところを捜していたので
あなたとお会いできるとは思わなかったです
書いてくれた人にもう一度聞きたかったんだけど
みんなに迷惑だと言っていたのであなたに聞けなかったんですよ
また教えていただけないでしょうか?
お願いします
先のレスで書いたように別々のところ2箇所から取り出さなければいけない事がわかりました
以前お話したようにファイルリストを作りたいのですが
タイトルの下にもう1行ありました
タイトルにファイル名のリンクその下に1行書かなければいけなかったんです
もしよろしければお時間のある時にでもまた教えて下さい
お願い致します
58:nobodyさん
08/04/05 17:13:24
>>55
なるほど。ありがとうございます
「/<h[13]>/i .. /<\/h[13]>/i」の部分が分かりません
$_に対してマッチしようとして真か偽を返すというのは分かるんですが範囲指定演算子がどういう役割をしてるか分からないです
>>56
何もできずにすまん
やっぱり>>55さんが紹介してくれたようなモジュールを使ったほうがいいよ
59:nobodyさん
08/04/05 17:46:59
>>57
うーん、仕変が激しすぎるので…仕事だったら請けてるんでしょうけど。
とりあえず
スレリンク(php板:278番)
という声もあったので、ちと考えてみます。
>>58
そこの .. でしたか。
説明しようとするとウソを書きそうなので
perldoc perlop や
URLリンク(perldoc.jp)
の説明やサンプルを眺めてみてください。
60:nobodyさん
08/04/05 18:14:08
>>59
すみません、perldocに目を通すのを忘れていました
コンテキストで役割が違うんですね
勉強になりました
本当にありがとうございました
61:nobodyさん
08/04/06 14:25:12
こんにちは>>57です
>>59さんレスありがとうございます
わかりました
この先どんな問題が出てくるのか予想も出来ないので取り合えず自分でできるように頑張ってみます
2chで聞く時に「質問者は環境とやりたいことを出来るだけ詳しく」ということなので
やりたいことを詳しく書く、そしたら解答してくれる前に新しい問題点を発見して「質問内容を変更します」って繰り返してしまいました
解答してくれる方にはご迷惑をお掛けして反省しています
perlを始めて1週間、変数について勉強しているとこです
スカラ変数を2個にして配列変数0、1とすればいいのかなって思いました
それで正解なのかはわかりませんが取り合えずタイトル以外にもう1個スカラ変数を増やして読み書きできる事を目指してみます
ありがとうございました
62:nobodyさん
08/04/06 22:29:28 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の初めからマッチングするようなコードを
ご教授お願いします。
63:47
08/04/07 07:06:59
誰向けでもなく一応のフォロー。
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 ;
64:nobodyさん
08/04/07 14:14:44
>>47さん
せっかく教えてくれたんだけど
今の私には理解できていないんだ(;´д⊂ヽ
後に参考になるかもしれないのでメモして大切に保存しておくよ
活用できなくて申し訳ない
ほんとにありがと
65:nobodyさん
08/04/07 19:50:52
動画ファイル(youtube.flv)のハッシュ(SHA-1)を求める方法を教えてください。
66:65
08/04/07 20:57:10
あれからずっとググってやっと見つけました。
ありがとうございました。
67:nobodyさん
08/04/08 00:48:13
perl/cgi逆引き大全600って本を1ページ目から読んでるんだけど
スカラと配列とハッシュがよくわかんない
スカラは値$
配列@は複数のスカラ値$
@があればスカラ変数$はいらないのでは?
@が複数のスカラ値と記載してあるんだけど
@へ複数の変数を入力する方法は記載されていないここが知りたいのに見当たらないね
最終的にソートする予定があればキーと値%のハュシュにしておいた方がいいのかな?
ソーと機能の所読んだらキーでソートするって書いてある
ハッシュをいくつも作って複数のハッシュを並べ替えてから書き込み
ってのが最終目標にすればいいのかな
39ページ目にして出てきたqwとはなんだろか??
目次にもTips検索にもない
ネットで調べたら
qw
シングルクォートで囲んだ文字列をスペースで split するのと同様です
命令を命令で説明しているところばかりだsplitってわかんない
splitを調べたsplitを使ってデータを分割と記載されている
・・・
qwはデータを分割するための命令なのか??
なんで日本語で解説しないんだ
先日もわかんない単語があった
ネットで調べたストリングと一緒と説明されていた
ストリング??ギターの弦か??ワケワカメ
68:nobodyさん
08/04/08 05:45:29
Perlの前に日本語から勉強しなおせ
69:nobodyさん
08/04/08 06:18:13
お前もな
70:nobodyさん
08/04/08 06:31:50
ここが一番わかりやすかった
perlのアレコレ
URLリンク(furyo.on-air.ne.jp)
私は10日ほど前からperlに興味を持ちお勉強してたんだよね
perl解説本3冊
ググルこと100サイト
初心者用ばかり選んでいるのにわかりにくいね
「簡単」「入門」「初級」で探してみるんだけど
中身は自分の思い出すためのメモ帳だね
全然わかんない
命令の説明に命令使って「入門」はないだろw
一般社会なら後進指導の立場には向いていないね
命令を説明するのに「○○はこんな感じです」と
その下にサンプル書いているだけではわかんね
私が選んだサイトは文脈からして10年くらいは経っているのではないかと思うがわかりやすいね
ヘンテコな広告も一切なくて集中して見れたな
「perlのアレコレ」管理人さんここを見ることはないかもしれないけど
ありがとう。
71:nobodyさん
08/04/08 07:04:21
>>70
…そこもたいして他と変らんよ。多分、覚えたての頃に書いたんだろ。
ヘタに丁寧に書いてある分不味い。
# 範囲演算子の第二の用法(このスレの46)なんかは、まあ省くのは
# しかたないとして。
初心者向けと言うのを加味しても、for の項の例文の無意味な代入とか、
\w の説明とか、
if($target =~ /my main editor is (\w+)/)
{
print "bad!\n" if $1 =~ /emacs/i;
print "good!\n" if $1 =~ /vi/i;
}
こんな例文とか。ちょっと眺めただけでも突っ込み所がある。
72:nobodyさん
08/04/08 23:43:12
$+ の意味はなんですか?
$# は探してたんでやっとわかった。最後の変数ね
大全600ダメだ
ゴミ買って来た様なもんだな使えねえ
他の解説書に気になるサンプルがあった
よく読んでもサンプルに出てくる$+の意味は解説されていない
仕方ないので意味を調べて廻る
くだらない時間が過ぎていく・・・
意味わかんないので他の解説書で調べたり
ググって調べたり無駄な時間ばっかりだ
それで答えは出てこない
どうなってんだ?
hello、perl以外作ったことないよ
グーグルで$+ と$# と半角でぐぐったら1件もヒットしない
なぜなんだろか??
怪しい命令なのかね
73:nobodyさん
08/04/08 23:57:18
>>72
URLリンク(www.google.com)
74:nobodyさん
08/04/09 00:44:21
>>73
ありがと
ラストプレーンマッチ
最後にマッチする括弧がどれかわからない場合に使うと便利
まさにこれですよ^^
ありがとう
while (<FH>) { $links{$title} = $1 and last if (m!<title>(.+?)</title>!) }
これの m! の部分はマルチオプションっていうのかな
後ろに!が付いているので複数行はダメという意味でよい?
これを複数行対応にしたいのでシングルモードに!にしてみると
while (<FH>) { $links{$title2} = $1 and last if (s!<title>(.+?)\n(.+?)</title>!) }
デバッグでエラーになるんだよね
複数行対応にするにはどうしたらいいですか?
ここが$+の使いどころかな?
わかんない・・・
75: ◆EtAiUEg7/Q
08/04/09 01:15:30
あぼーん用に捨てトリ。>>55です。
>>74
だからそのコードは使い回さずに書き直してくださいと(ry
m! … スラッシュのエスケープが面倒だった。 / 以外の記号でパターンを囲むとき用。
後ろの ! … m! で始めたんだから終わりも同じ記号。
複数行 … スレリンク(tech板:638番)+642 で教えました。
ついでに言うと
スレリンク(tech板:673番)
も私です。「gawkで片づいたら、くだすれPerlのアレは全部無駄ですか」という気持ちがあのレス。
ご自分でお書きのとおり「残念」です。
あと、ここもム板の正規表現スレも自分の日記を書くとこじゃありません。
76: ◆EtAiUEg7/Q
08/04/09 01:55:27
忘れてた。
while (<FH>) { # 1行ずつ読み込んでループする。$_ に入ってるのは1行だけ }
77:nobodyさん
08/04/09 02:43:19
>>75さん
こんばんわお世話になります^^
正規表現の「残念でした」は先の言葉が「次はなんだろう」だったので
クイズのノリなのかと思って
perl→gawkは正解じゃないので「残念でした♪またどーぞ♪」のノリでお答えしたのですが
言葉は難しいですね
ご心配無用ですよ
私がやりたい事を理解できればスグ消えます
ただ思ったよりかなり時間はかかっていますが
パソコンには関係のない商売なのでこればっかり調べたり勉強してとかは実際無理なので。
例の教えて頂いたコードを参考にさせて頂いているのですが
コードって元コードを理解しないと書けないですね^^;
あのコードで特にわからないの所は2箇所あります
1箇所目は複数行
2箇所目は下から3行目のループ
1行で$fileを3回使っていますよね
2回目$fileはファイル名だとわかるのですがlist_fileの宣言をすれば自動的に省略して$fileでOK??
1回目はmyが初めについているのでこの行で宣言してるってことなのだろうか?
3回目はlinksになっている何故$file(同じ文字なのに)動作は違うのかがよくわかりません
タイトルの下にデータ行と備考項目と増やしたいのですが何故か最初の5バイトが無くなるんです
まあ気長にやってみますよ
オヤシミ^^
78: ◆EtAiUEg7/Q
08/04/09 03:07:32
>>77
# 「こんぴーたに無関係な商売なので、用事が済めばあんたらにもプログラミングにも用はない」と
# 言ってることに気づいてるのかなあ。
・複数行のこと。
ループ書き直すのが面倒な心境なので略。
・foreach my $file (sort keys %links) { print FH qq|\t<li><a href="$file">$links{$file}</a></li>\n| } のこと。
foreach (sort keys %links) { print FH qq|\t<li><a href="$_">$links{$_}</a></li>\n| }
# 動作は同じ。
79:nobodyさん
08/04/09 03:29:44
>>78
よくわかんないけど
可哀相な人だ
ヘンテコなとらえ方してるね
あなたには感謝しているけど
仕事を放ったらかしでは生きていけませんという意味なのだが・・・
とにかくありがとう
>>78に記載してくれたコードも猫に小判
私には理解できていない
自力でなんとか頑張ってみるよ
あなたはとてもお人好しでいい人だ
知識もある
短気なところ直せば世界が変わると思うよ
オヤシミ^^
80:nobodyさん
08/04/09 10:21:11
>>74
m//
URLリンク(perldoc.perl.org)
複数行対応
URLリンク(perldoc.perl.org)
81:nobodyさん
08/04/09 11:43:17
>>◆EtAiUEg7/Q
アンタ良い人だよ、おつかれさんw
82:nobodyさん
08/04/09 16:26:01
>>80
ありがと
$str =~ s/<aaa.*?>(.+?)<aaa>/$1/s;
これまだ活用できていないんよ^^;
検索するところに("$str")や("$1")とかしてみるんだけど結果が出ない
んで書き込みのところも同じようにしてみた・・・結果は出ない
命令の前にmyを付けてmy $str =~ s/<aaa.*?>(.+?)<aaa>/$1/s;とかやってみたけど同じだ
この複数行対応はまだまだ先の課題のようだorz
%linksこれって特別な命令ですか?
どうもこれがわかっていないと検索文字がおかしくなるみたい
(m!<title>(.+?)</title>!)これの場合対応したファイルは狙い通りに処理が終わる
(m!<title(.+?)/title>!)こうすると >タイトル< という感じで両端に><がひとつづつくっついている
他の<で始まる文字列を検索してみた
自分で適当に作った<aaa>とかは思い通りに処理してるけど
<objct>をターゲットにしてみた<object(.+?)object>
なぜか先頭部分と後部は消えている
%linksを%teslinkstesという変数名に変えてみた
構文チェックはエラーなし。しかし起動しなかった^^;
%linksを調べてみた
相変わらず全集600には当然のように記載されていない
ネットだけが頼りか・・・
リンク集ばかりヒットする
ググル文字を変えて「perl 命令」「perl 索引」「perl 逆引」
期待できそうなサイトはあったけど%linksは見当たらない
みんなどこで覚えてるんだろうか学校行ってたのかな?
サンプルを参考にさせて貰う以前の問題だな
%linksは明らかに特別な変数のような希ガス
83:nobodyさん
08/04/09 16:33:39
「perl 特殊変数」でぐぐるといい
もしくは
perldoc Perlvar
特殊変数以外は自分で定義してるはず。
84:nobodyさん
08/04/09 17:22:09
>>82
せめて>>70のリンク先(決して推薦はせんが、ま、しかたない)の全部を
「実践」- 読むだけじゃなく実際に実行してみること - してから
質問してくれんか?
答える気にもならんよ。レスしても「理解出来ない」で終りだし。
◆EtAiUEg7/Q はよくもまあこんなのに色んなスレで付き合ったもんだ。
85:nobodyさん
08/04/09 17:51:57
>>83さん
>特殊変数以外は自分で定義してるはず。
これのようだ
ありがと
>>84
スレタイ嫁としかいいようないな
質問もアドバイスもしないあなたは何者?
どっか逝けばいいよ
86:nobodyさん
08/04/10 13:21:24
超初心者用ってもPerlのって事だろ
日本語の初心者やそれ以下のヒトとしての初心者はどうかと思うがな
87:nobodyさん
08/04/10 16:30:12
なんか思い込み激しいね
こんなの呼ばわりやそれ以下呼ばわりするほうが
よっぽど人として恥ずかしいので覚えておくといいよ
perl書けたから何?エライの?勘違いもイイトコだ実社会ではね
私はperlに関係あることを書き込みに来ているわけで
単語もわからないので超初心者だと自覚してるよ
まぁそういうのここでは関係ないでしょ
子供の言い合いみたいなのに付き合ってられないので
以降その手の話題は私にはしないで結構ですレスもしないです
今のところ解答者は2名のようだが居なくなるかもしれないし
気まぐれな方が通るかもわかんない
気長に待ってみてもレスもなく、このスレ消滅ってって事でも
それはそれで仕方ない私がどうこう出来ることでもない
煽るだけのレスよりかはいいと思う
今日のわからないこと。
取得タイトル部分は <a href でファイル名にリンクが張られている
後にprintした結果のタイトルには<title>のタグは付いていない
その部分を真似て他の部分を取得しようと試してみた
文字列だけがprintされているタグは前後ともに切れている
わからなかい例の1行で3回fileを使っている部分が味噌だな
その部分のスグ下で print FH qq|"$file"\n|; を記載してみた
何も取得しない・・・$fileを他の形式にしても同じようだ
謎の1行はその1行で3個の$fileを育成しているのか??
文字列の取得だけの場合は応用が利くって事がわかった
タグ付きの部分の取得はまた別にしたほうが良さげ
perlでタグ付き文字列取得の謎ってことで今日はおいておこ^^
88:nobodyさん
08/04/10 16:57:06
質問にはわかる範囲で答えてあげたいけど、マナーや礼儀も必要。
質問は簡潔に。
煽りはスルーで。
回答には感謝を。
おっぱいうp。
89:nobodyさん
08/04/10 17:04:46
せっかく和みレスが入った所悪いが、、、
>>87
俺は47=71=84≠86。
全く進歩しない奴にレスしてもつまらん。
お前が(無いと思うが)俺を回答者としてカウントしてるなら外してくれ。
「超初心者」と自覚してるならば、誘導URLを見て、変数、配列、ハッシュ
辺りの基本用語を頭に入れるくらいの礼儀は心得ろ。
# 正規表現スレにお前が表われて7日。全く進歩してないんだもん。
# 教えて君にも程がある。
煽ってくれても構わんが、その煽りの文章を考える暇があったら(中級以上の
リファレンスを買うんではなく)初心者本でも素直に買って読めよ。
空気悪くしてすまん、他の人。しばらくレスは自粛します。
90:nobodyさん
08/04/10 17:07:35
マナーや礼儀ってあなたが決めてるの?
「マナーたるものこういうものである」
「礼儀とは云々・・・」思い込み激しいと疎外しちゃうよ
なんか勘違いしてるね
ペコペコしろという上から目線
キンモ〜〜としか言いようないなw
91:nobodyさん
08/04/10 17:23:04
>>90
俺、>>81=>>83=>>88
質問者=初心者ではないし、回答者=エライわけでもない。
わからないことは質問する、わかることは答える。
ただ、教えを請う立場なら礼儀は必要だと思う。
でも勘違いしてるならしょうがない、以後回答は控えます。
92:nobodyさん
08/04/10 17:30:12
>>91
あ、そうなんだ
お世話になったねありがと
お疲れちゃん
93:nobodyさん
08/04/10 17:54:14
情報が只でもらえると勘違いしてる質問者か。
俺も抜ける。まぁ、頑張れ。
94:nobodyさん
08/04/10 17:57:34
>>93
こんなとこで客を探してる暇な業者さんなのだろか?
さよなら
公然の場所で恥ずかしげもない
その発言が面白すぎて
釣られたー
95:nobodyさん
08/04/10 18:09:05
久々に香ばしいのが沸いたなあ
ま、一所懸命煽ってがんばってくれ
俺も抜けるよー
96:nobodyさん
08/04/10 18:15:14
>>95
ていうかさっきからここで発言してるの
あなたと私だけじゃないでしょうか?
まぁ解答しないよってのはよくわかったのだが
それで何?くらいにしか思わないのだがw
ま、さよなら
お元気で^^
97: ◆EtAiUEg7/Q
08/04/10 18:30:14
>>85
スレタイの「超初心者」ってのは…
--
use strict;
my %doubutsu; # どうぶつハッシュ
# $doubutsu{'いぬ'} = 'ポチ';
# $doubutsu{'ねこ'} = 'タマ';
# はじめはこうしてたのですが、種類を増やしやすいように工夫してみました。
my @kumiawase = ('いぬ','ポチ','ねこ','タマ','へび','ガララ');
for (my $i = 0; $i < $#kumiawase; $i++) {
$doubutsu{$kumiawase[$i]} = $kumiawase[$i+1];
}
foreach (keys %doubutsu) {
# 「うちの タマ の名前は へび です。」という大惨事が!ヒントください!
print "うちの $_ の名前は $doubutsu{$_} です。\n";
}
--
…こういう「プログラミングを身につけるのが目的」の超初心者さんのこと。
「そりゃそうなる。$i++ を $i+=2 に変えてみ。つーか、ガララかよw」とか
「("いぬ\tポチ",...) 形式にして foreach と split(/\t/) 使ったらどう?」とか
気のいい回答者さんたちが相手してくれる。
結果だけが目当てなのに業者依頼もせず、気長に取り組むつもりも全くなく、
先を急ぎまくって質問を次々に投げる人は、初心者でも何でもありません。
> 仕事を放ったらかしでは生きていけません
そうですよ。
あなたのような方から「要求定義262,500円 + 制作3,150円 = 計265,650円」をいただく立場の人たちが
仕事をほったらかしてタダでできるのは、冒頭のような初心者さんのお手伝いぐらいです。
98: ◆EtAiUEg7/Q
08/04/10 18:30:49
>>89
今更ですが range operator の誰向けでもないフォロー、ありがとうございます。
説明しようとして「左項が真になるとスイッチが入り…えーと…perldoc」でしたので。
「よくもまあ」ではあるんですが、仕事もヒマな時期でしたし
・いつも見てるスレに何かが来る
・自分が回答
・「理解できない。でもありがとう」と言って(一旦)去る
…これで他の方の被害が少しは減るのなら、と。
ソフ板辺りも壮大なことになってそうですが、あちらは見てないので関わってません。
教えてちゃんですらないんですよね。
結果が欲しい、手法には興味がない(と書くと「違う」と返されるだろうけど)、と。
そんなわけだから処理系自体がコロコロ変わったりもするわさ、と。
腰を据えて初心者本でお勉強という方向へは行かない人なのでしょう。
本当は自分もこんな話は書きたくないんですが、誰かが書かないと日記が延々と続くんだなあ
と思ったので、NG用に捨てトリつけた次第です。
>>96
短気を起こしていろんな人を煽っても、いいことないですよ。
そういえば、私の短気なとこを直せば世界が変わると教えてくれた人がいました。
(レス|回答)自粛の方が続出、と。まあ、仕方ないというか自然な流れでしょうな。
捨てトリももう要らなくなって、ここは素敵な日記スレに移行かな。
99:nobodyさん
08/04/10 18:31:42
>>96はKY
100:nobodyさん
08/04/10 18:35:01
まーくだすれだしアリっちゃアリ。
101: ◆EtAiUEg7/Q
08/04/10 18:37:23
>>99 =~ s/96/97/; # 勝手に直しとく
102:nobodyさん
08/04/10 18:44:02
>>97
おぉやっぱりあなたか
あなたが顔を真っ赤かにしながらレスしている姿は笑えないよ
(まぁ吹いちゃってしまったのだがwww)
なんか難しい説明されてもよくわからない
くだすれ = くだらないスレ と教えてくれたのですが
しかも超初心者とまで付け足してあるw
まさに私のためのスレだと思ったよ
スレタイは業者の釣りえさだったのか
気づけよ>>自分www
そんなに必死になるほどのことでもないので
むしろどーでもいいことなんだけど
気になったからやってるだけで
質問者は回答に飢えている
この心理を突いた網だったのだ
ネットでネット(網)張ってましたねw
洒落にもならないけど実際そういう人がいてたのか・・・
必死やのー
ま、気長にやっていくのであなたは私を気遣う必要ないですよ
んじゃね
103:nobodyさん
08/04/10 18:52:33
>子供の言い合いみたいなのに付き合ってられないので
>以降その手の話題は私にはしないで結構ですレスもしないです
リャマ本からの引用
「Perlは、少なくとも毎日20分間はプログラムを書く--そしてほとんどのプログラムをPerlで書く--人向けの言語です。」
もし、毎日書くか事情があるなら>>89の引用
>その煽りの文章を考える暇があったら(中級以上のリファレンスを買うんではなく)初心者本でも素直に買って読めよ。
腰を長くすえるなら応用のきくやつを学べ。
アドバイスいっぱい転がってるじゃん。
あと、おまえなじられたら死ぬのか?
104:nobodyさん
08/04/10 18:54:15
|
|
∩___∩ |
| ノ _, ,_ ヽ (( | プラプラ
/ ● ● | (=)
| ( _●_) ミ _ (⌒) J ))
彡、 |∪| ノ
⊂⌒ヽ / ヽノ ヽ /⌒つ
\ ヽ / ヽ /
\_,,ノ |、_ノ
/
ぷちっ /
∩___∩ . 从 /
| ノ ヽ /
/ ● ● | (=)ヽし
| ( _●_) ミ/ ` ノ
彡、 |∪| ノ /
/ ヽノ / ノノ
/ /
/ /
ムシャ |
ムシャ |
∩___∩ | ぷらぷら
| ノ ヽ (( |
/ ● ● | J ))
. (( | ( _●_) ミ ・
彡、 |∪}=) ,ノ ∴
/ ヽ/^ヽ ヽ 。
| ヽ \ |
| ヽ__ノ
105: ◆EtAiUEg7/Q
08/04/10 18:57:11
>>102
何か、私にはわからない謎の陰謀にお気づきになった様子ですが
自分が>>78の次に書いたのは>>97ですよ。
「私=ここで客を待ち構えてる業者」ということにしたいのでしたら、どうぞご自由に。
# こんなとこで客を拾うのってめんどくさそうだなーとしか思えないけど。
106:nobodyさん
08/04/10 19:00:59
よくわからんが私の質問どっかいっちゃったのは確か棚
107:nobodyさん
08/04/10 19:01:12
久々に叩かれまくられてるのを見た
超初心者でもここまでの香具師はそうそういまい
108:nobodyさん
08/04/10 19:02:32
レスしてるのは俺ひとりなんだけどな。
109:nobodyさん
08/04/10 19:09:35
電波役になったり電波に煽られる役になったり◆EtAiUEg7/Q役になったりしながら
ひとりでスレ回すのってマジ大変。
110:nobodyさん
08/04/10 20:06:37
くだすれ = くだらないスレじゃなくて
詳しい人が見たらくだらない質問だと思ってたけどな。
>>1を読んでもそう取れる。
111:nobodyさん
08/04/10 23:57:10
>>102
おまえ、キチガイで名をはせたヨシオカヒデノリだろ。キチガイっぷりがそっくりだ。
112:nobodyさん
08/04/12 00:00:56
>>87
>>なんか思い込み激しいね
が>>87を見ても>>102を見ても自分の発言に対して書いてるようにしか思えない点について
113:nobodyさん
08/04/13 13:47:51
元気でやっとるかね^^
ちょっとわからないことがあってまた落書きしに来たのだw
解答いただけたら嬉しいけど期待できないのはわかっているので
気長に解答者さん待ってみるよ^^;
@抽出部分の検索文字を <object (.+?)object> にすると
(.+?)の部分だけが取れて
始めに出てくるはずの <object と 最後の object> が現れないんだよね
変数宣言の名前を全部変えてみたけど動くので特別な変数名は使っていないようだ
perl自体がそういう仕様なのかね??
Aそれから複数行抽出なんだけど
1行もしくは2行もしくは3行ってのはダメなのかな?
(s<title(.+?)title>|<title(.+?)\n(.+?)title>|<title(.+?)\n(.+?)\n(.+?)title>s);
Bそれからまだあるんだよね
<title>
<object>
<span>
この3箇所を抽出したいんだけど何故か最後に書いたトコだけが取れるんだ
{ と } の間に3つとも書いているんだけど
ファイルクローズして改めてファイルオープンするって手順にするべきなのだろうか?
今はソースぐちゃぐちゃでワケワカメになってきたw
全集600ダメだ
オープン オブ ダイ で ダイの部分が予約語なのか調べて見てもわかんない
他の本でdieの意味がわかる
せめて予約語は全部掲載してもらいたいもんだ
それでは@〜Bよろしく願います
また会おう^^;
シーユーあげ印w
114:nobodyさん
08/04/13 15:31:39
(〜´-`)〜
115:nobodyさん
08/04/13 18:34:17
向うでデリミタの質問をしたのもコイツか?
お前のせいで、他の人の質問でも答える気にならんのだよ自重してくれんかね。
116:nobodyさん
08/04/13 18:44:46
便乗したのがコイツだろ…進歩の無いコテが答えたからいいけどさ
あのコテも短レスで時々全然ボケた答え返すんだよなあ消えてくんねえかな
117:nobodyさん
08/04/14 01:20:54
('A`)前進しないよ
これの27行目 closedir(DIR); でエラーになるんだけどなんで?
#!/perl/bin/perl
use strict;
use warnings;
print "<html>\n";
&traverse_html(".");
print "</html>\n";
sub traverse_html {
my $dirname = shift;
my $delim = '/';
if ($dirname =~ /[\/\\]$/) {
$delim = '';
}
print "<ul>\n";
opendir(DIR, $dirname) or die "$dirname: $!";
foreach my $entry (readdir(DIR)) {
next if ($entry eq '.');
next if ($entry eq '..');
my $filename = "$dirname$delim$entry";
if (-d $filename) {
print "<li>$entry\n";
&traverse_html($filename);
} else {
&do_html($filename, $entry);
}
}
closedir(DIR);
print "</ul>\n";
}
118:nobodyさん
08/04/14 08:31:02
>>117
再起してるからじゃね?先にファイル一覧を取得してclosedirしてから再起呼び出しするか、
ディレクトリハンドル(DIR)をローカル変数に浮かすかすればインジャネ?
traverse_html ※1 の中で traverse_html ※2 を呼び出す
→ ※1のDIRを※2で上書きする
→ ※1に戻ったとき ※2のDIRはclose済み
テストしてないから動くかは知らんけどこんな感じ。
sub traverse_html {
my $dirname = shift;
my $delim = '/';
my @entrys = undef;
my $i = 0, $j = 0;
if ($dirname =~ /[\/\\]$/) {
$delim = '';
}
print "<ul>\n";
opendir(DIR, $dirname) or die "$dirname: $!";
foreach my $entry (readdir(DIR)) {
next if ($entry eq '.');
next if ($entry eq '..');
$entrys($i++) = $entry;
}
closedir(DIR);
for ($j=0;$j<$i;j++){
my $filename = "$dirname$delim$entrys($j)";
if (-d $filename) { print "<li>$entrys($j)\n"; &traverse_html($filename); }
else { &do_html($filename, $entrys($j)); }
}
print "</ul>\n";
}
119:nobodyさん
08/04/14 13:27:25
>>118さん
レスありがとう^^
試してみたら
my @entrys = undef;
my $i = 0, $j = 0;
部分でエラーになって以下関連箇所もエラーになるんだよね
>>117のコードでのエラー文こんな感じ
closedir() attempted on invalid dirhandle DIR at itiran-tes.pl line29
構文チェックではエラーにならない
デバッグの識別子チェックというのを実行してみたらエラー箇所がわかって
タイトルとファイル名は取得されていてリンクも貼られているようだ
>>117の closedir(DIR);がエラーにならないように出来たら
ワンステップだけど前進出来そうなんだよね
もうちょっと色々試してみるよ
朝のあわただしい中わざわざレスしてくれてありがとう
丁寧に教えてくれて感謝してまふ
んじゃ
120:117
08/04/14 13:33:05
>>117には続きがあるんだけど
2chの文字数制限で記載できなかったんだ
#ここに>>117の部分がある
sub do_html {
my ($filename, $entry) = @_;
return unless ($filename =~ /\.html?$/);
open(FILE, $filename) or die "$filename: $!";
my $file = join('', <FILE>);
close(FILE);
my $title;
if ($file =~ m|<title>(.*?)</title>|si) {
$title = $1;
$title =~ s/[\r\n]//g;
} else {
$title = $entry;
}
print qq|<li><a href="$filename">$title</a>\n|;
}
121:118
08/04/14 15:57:05
とりあえず、Linux Perl v5.8.6で動かしてみた。
117と120をつなげて動かしたら動いたよ。
OSやPerlインタプリタのの問題かな?
122:nobodyさん
08/04/14 16:17:14
>>121
「オープン オブ ダイ」の話を書いてから12時間で
readdir でぶん回して再帰もしちゃうんだぞ、ってところが問題なんだと思うよ。
123:117
08/04/14 16:47:14
>>121さん
そうなんだ
わざわざテストしてくれたんだ(;´д⊂ヽありがとう
WindowsXP
アクティブパール5.88
シグウィンでもっかいテストしてみて作者にメールしてみるよ
ありがと
>>122
何が問題なのだ?
質問も解答もしないのに横から茶々入れてるあなたのほうがよっぽど問題なのだが・・・
購入した本にサンプルが付いていた
動かないので自分で解決できないか模索した
どこがおかしいのだ
あんたの頭かw
124:nobodyさん
08/04/14 17:20:05
向うで再帰の質問をしたのもコイツか?
お前のせいで、他の人の質問でも答える気にならんのだよ自重してくれんかね。
>その煽りの文章を考える暇があったら(中級以上のリファレンスを買うんではなく)初心者本でも素直に買って読めよ。
125:117
08/04/14 17:21:37
cygwinで動いたんだけどcdのhtmlからの取得はしていなかった
サビフォルダーに置いていたhtmlからの取得は全部おk
コマンドプロンプトで確認したんだけど
ファイルは作成されていない
コマンドプロンプトの操作画面に現れたものを
ファイルに保存するのはどうすればいいですか?
取りあえず>>122は答えなくていいよ
どうせ野次るだけなのは明白だ
自分でも探してみるけど
私に理解できるように答えれる方おられましたらよろしくお願いします
126:nobodyさん
08/04/14 17:22:29
>その煽りの文章を考える暇があったら(中級以上のリファレンスを買うんではなく)初心者本でも素直に買って読めよ。
127:nobodyさん
08/04/14 17:23:21
>>124
それ勘違い
再起わかんないので具体的な質問できないよ
その質問には答えてあげればイイヨ
どうせ私が見てもわかんないのでヨロシコ
128:nobodyさん
08/04/14 17:25:31
再帰を「再起」と書く初心者が同じ日に二箇所に現われるもんかねえ。
129:nobodyさん
08/04/14 17:27:06
>>126
「超初心者用」と「初心者用」購入したんだけど
ささっと変数を解説したらCGIの話ばかりで
ファイル操作は最後のほうでちょびっとだけ解説してるんだ
なぜかperlの解説本は「CGI」「CGI」の連呼でキモい
130:nobodyさん
08/04/14 17:29:05
>>128
誤字がどうしたのだ?
そんなの関係ないと思う
小心者だねw
131:むこうの928
08/04/14 18:04:05
>>124,>>128
激しくゴメン。別人です。
何日か前から、こっちがこんなことになってるから、むこうで聞いてみた。
(まあ実際WebProgではないんだけど)
しまった”再帰”か〜。
つっても再起でコケてるわけではなくて、(まただw)
どうも =~ s///e の”e”でこけてるようなんだ。
正規表現絡みで、しかもこっちこんな状況だったからあんま書き込みたくなかったんだけど
案の定つっこまれてしまった。
まあいいや、今は時期が悪かったってことで、暫く消えます。
132:nobodyさん
08/04/14 20:11:42
一応、お詫びします。迷ったけどこっちに書きます。
貴方が本当に別人なら理解出来るでしょう。
======================
当方、確認の術を持たないので(win環境なし)。
s///e の問題にしろ再帰の問題にしろ、再帰を使うほどの
ネタでは無さそう。あくまでも適当に書いた例だけど。
# Wide character warning が出るのは御愛嬌。
use utf8 ;
my %hash
= map{
my $new = $_ ;
$new =~ s/(\d)(\d)/$1十$2/ if length $new == 2 ;
$new =~ s/1十(\d)/十$1/ ;
$new =~ tr/123456789/一二三四五六七八九/ ;
$new =~ s/0// ;
$_, $new ;
} 1 .. 99 ;
while(my $line=<DATA>){
$line =~ s/(\d+)条/$hash{$1}条/; print $line ;
}
__DATA__
3条
24条
10条
133:nobodyさん
08/04/14 20:48:09
こっちでいいのかな?
>>131
ActivePerl5.8.8(build816) で試そうとしたんですけど、標準入力からうまく食ってもらえず。
で、__DATA__ と <DATA> にしたり
open(IN, '<', 'list.utf8'); binmode(IN, ":utf8"); 以下略にしたりしてみたら
意図どおり(のはず)の出力になりました。perl.exe も落ちず。
# CP932 な環境で binmode(STDIN, ":utf8") って考えたこと自体がないのでよくわからない。
>>115>>124
諸事情により疲れすぎて疑心暗鬼になってるように見えますよ。
諸事情のほうは継続の気配なので、少し休まれては如何かと。
134:130
08/04/15 02:25:32
こっちにレスがついてた。みんなサンクス
>>132
イエッサー。わかりますとも。自分でも向こうに書き込んだ後に、ハッシュ使えばs///eも再帰も必要ないかなって思った。
処理速度もこっちのほうが速いし。でも自分で書いたのはこんなの。うーん、いまイチスマートにならないなあ。
my $kanj;
for (1..99){
my $kan = $_;
$kan = substr($_,0,1) . '十' . substr($_,1,1) if($_ >= 10);
$kan =~ tr/123456789/一二三四五六七八九/;
$kan =~ tr/0//d; $kan =~ s/一十/十/; $kanj->{"$_"} = $kan;
}
135:130
08/04/15 02:26:02
>>133
あれ、ちゃんと動きましたか?
うちでは昼間とは別のPC(PerlのVerは同じ)でやってみたけど、やっぱり例のWindowsダイアログが出て落ちる。
で、いろいろあがいてみたところ、上では、再帰ではないっぽいこと言ったけど、やっぱり再帰に問題ありかと。
特にif($num>=20)のところで、$1と$2を同じ関数に再帰してるとこで、次の正規表現マッチで$1$2あたりが壊れるんではないかと。
(ちなみに、これまたCentOS4,Perl-5.8.8-5.rpmだと期待通りに動く)
上で再帰ではないと思ったのは、あのスクリプトを、use utf8;とbinmode関係コメントアウトして実行してみると、
(当然tr/123.../のところで文字列がぶっ壊れるけど)、最後まで落ちずに走ることと、
以前に正規表現($1$2や$'$`$&も)使いまくりで、さらに6-7段ぐらいネストした関数書いた時も、期待通りに動いてくれたんで、
ちゃんと覚えてくれてるものかと思ってた。これからは、どうやらこれを改めないといけないようだ。
> # CP932 な環境で binmode(STDIN, ":utf8") って考えたこと自体がないのでよくわからない。
自分は、Win上でもtextは基本的にUTF-8で保存してるもんで、(本番環境がLinuxなのもあるけど)ワンライナーっぽく書くときは、
コードの中でopenやら、encode(decode(...))やら書くのメンドいんで、perl script.pl < infile.txt > puts.txt みたな感じを多用してます。
ちなみに、向こうのコードをopen(IN...)とかでやっても、ウチの環境ではやっぱりperl.exeが落ちるのは変わらない。
136:134,135
08/04/15 02:27:42
ごめん、激しくゴメン。
名前欄>>131の誤りです。
やっぱり消えます。
137:nobodyさん
08/04/15 04:16:40
>>135
大変失礼しました、重ねてお詫びします。
>>133
>諸事情により疲れすぎて疑心暗鬼になってるように見えますよ。
>諸事情のほうは継続の気配なので、少し休まれては如何かと。
ほんとにその様です。穴があったら入りたいw
138:nobodyさん
08/04/15 04:17:12
俺も穴があったら入りたい(性的な意味合いで)
139:nobodyさん
08/04/15 15:19:10
これからジュンク堂とヨドバスカメラとbook1stとアサヒヤと紀伊国屋行ってみる
りゃまbonがいいんだね
先日、立ち読みしたラクダの本かな?
アレファイル操作詳しく載ってるの?
取りあえず今日はperlの絵本というのを探してみようかと思う
ま行ってみるよ
んじゃ
140:133
08/04/15 17:04:26
事故レス。
> 標準入力からうまく食ってもらえず。
test.pl < list.utf8 > converted.utf8 # 0バイトのファイル生成で頭抱える。
test.pl < list.utf8 # 何も吐いてくれない。
perl test.pl < list.utf8 > converted.utf8 # …ちゃんと食ってくれますね。
他人様の疲れを気にする前に、寝ぼけた自分をどうにかしろと。
>>135
要件通りに動くことより「なんで perl.exe が落ちるのはどうして?」が本題ですよね。
ちと時間があったので追試しました。
# 上記寝ぼけから醒めたので STDIN から食う元通りのコード
# 食わせたのは for (1..99) { print "ふんにゃか市$_条\n" } で作ったファイル
5.8.8-816 on Win2kSP4 → 正常動作。
5.8.8-819 on WinXPSP2 → 正常動作。
# ビルドを上げる
5.8.8-822 on WinXPSP2 → アッー!
# 本当に落ちたので下げた
5.8.8-820 on WinXPSP2 → 正常動作。
build822 だと見事に落ちますねえ。
141:nobodyさん
08/04/15 19:22:38
みごとな検証、お疲れ様。
質問者様が見てくれるといいが。
142:nobodyさん
08/04/15 23:20:39
>>140
原因が同じか違うかもさっぱりわからないが、
5.8.8 build822だとStorableを使ったコードで
大量のstorableデータ(50MB強)を読み込ませると読み込みが終わらない、
という現象にあたったことがある。
同一コードで、build817、あるいは5.10.0 build1001, 1002 では問題なかった。
というわけで、個人的にbuild822は信用していない。
参考情報と言うことで。
143:nobodyさん
08/04/16 16:55:29
*本当の検証*が向こうに出てたので、>>131さんもご覧になるでしょう。
まあ、元々向こうのネタですし。
# きちんと問題の切り分けして再現する最小コード出す辺りが「向こう」なのかも。
自分のは検証でなく、「おらの環境では動いたずら」だけではひどいと思ったので
補足した程度ですから。
>>142
build822 をインスコすると build821 用の release.(html|txt) が入ってて萎えるんですが
CHANGES.txt で build821, 822 だけに書かれてる
> plus additional selected changes from the Perl 5.9 development branch.
これが気になってます。
> Build 821 was only distributed for HP-UX.
ここは…笑うところなのかな。
build822 が5.8系の latest ではあるんですが、自分も同じ印象です。
配布CGI+改造のテスト程度は大丈夫なんでしょうけどね。
144:135
08/04/16 20:08:19
みなさん本当にありがとうございます。
向こうで見事な回答を頂きました。(Cコードを読み解く力がないので具体的なことはよくわかりませんが・・。)
>>140
わざわざ試して頂いてありがとうございます。
自分の記憶では、817->819と820->822でバイナリ互換が崩れる(DBIやEncode、Uni-Jpなんかを再ビルドしないといけない)ので、
古いバージョンに戻してまでやってみようと言う気が起きませんでした。
(ちなみに819->820は再ビルド無しでモジュールが動きました。)
>>142,>>143
そうですか、build822はあんまりよろしくないのかな?
向こうの返答では、5.10系でも同様に落ちるらしいので、むしろこのコードで動いているほうがよろしくないってことで
修正されたんではないかと思いますが、実際のところよくわかりません。(動くことによる不具合が思いつかない。)
今度ヒマな時にでも、Linux環境でperl-5.10をソースからコンパイルして同じコード試して見ます。
まあどちらにせよ、再帰の中で、tr///(s///も?)を使うようなコードは書かないようにしないといけないっぽいですね。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5283日前に更新/136 KB
担当:undef