Perlコーディング初心者質問スレ Part 59
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/02/16(月) 11:42:29ID:gvPTpodw【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >2 以降
前スレ http://pc11.2ch.net/test/read.cgi/php/1218030872/
0377nobodyさん
2009/05/02(土) 12:08:08ID:???0378nobodyさん
2009/05/02(土) 12:44:54ID:???0379374
2009/05/02(土) 12:47:26ID:???ありがとうございます
そのとおりやってみたら、見事に$erase以外がログに書き込まれていました。
おっしゃる通り、改行が含まれていたせいみたいです。
しかし、修正されたログにも同じように数字ごとに改行を含んでおきたいのですが、
この処理だと
119049025
のように改行なしで一気に書かれてしまいました。
そこで、元の自分の書いたものに>>376さんのアドバイスで修正を加え
chomp @datalist;
for ( my $k = 0 ; $k < @datalist ; $k++ ) {
if ( $datalist[$k] ne $erase ) {
push(@newlist, "$datalist[$k]\n");
}
}
としてみると、一応、望み通りの結果を出すことができました。
二晩くらい悩みまくったので、とても助かりました。
ほんとうにありがとうございました。
grepを使った方法は今まで使ったことが無くて、一行で処理できる
美しいコードに感激したので、もしよろしければ自分の書いた方法以外で
同じ結果の出せる(改行含む)書き方があれば教えてやってください。
0382nobodyさん
2009/05/02(土) 17:09:01ID:???0383nobodyさん
2009/05/02(土) 17:44:55ID:???0384nobodyさん
2009/05/02(土) 18:10:31ID:???0385384
2009/05/02(土) 18:15:58ID:???0386374
2009/05/02(土) 18:37:39ID:???map { s/^\Q$erasedat\E\n$//; } @datalist;
で希望通りに処理されるのを確認できました。
mapとかgrepというのを使いこなせば、いま自分の書いてる現行のスクリプトで
改善できるところがすごく多そうなので、ちょっと勉強してみます。。
ほんとに助かりました。親切にありがとうございました
0387374
2009/05/02(土) 18:39:02ID:???0388nobodyさん
2009/05/02(土) 19:51:16ID:???0389nobodyさん
2009/05/02(土) 21:04:48ID:???0391nobodyさん
2009/05/05(火) 04:15:46ID:???0392nobodyさん
2009/05/05(火) 10:06:17ID:???0393nobodyさん
2009/05/05(火) 13:43:50ID:???0394nobodyさん
2009/05/05(火) 14:21:29ID:???0395nobodyさん
2009/05/06(水) 01:57:30ID:???0396nobodyさん
2009/05/06(水) 08:18:31ID:???LWP::UserAgent を使って取得したいんですが、
リンクを幾つかたどっていく必要があります。
cookie は何とかなったんですが、
1つ前の html ファイルにあるパラメータを取得して POST メソッド時に引き渡すところの
解析に手を焼いています。
# パラメータ名は判っているので現在は文字列検索で取得しています。
a href などではなく、POST メソッドのパラメータも解析してくれる
便利なパッケージって無いでしょうか
0397nobodyさん
2009/05/06(水) 11:03:19ID:???&sub (@hoge);
ではダメなんでしょうか?
この記述で渡して、受け取ったサブルーチン側でログに書きだしたら
各行に空白が入るようになってしまったんですが。。。
0398nobodyさん
2009/05/06(水) 11:35:46ID:???0399nobodyさん
2009/05/06(水) 11:50:51ID:Ms7+WRwlもともとの値がちゃんと期待通りの値か確認してみ
他の可能性としては
my(@args);
としてるだけで
@args = @_;
みたいにするの忘れててサブルーチン側でちゃんと受け取ってないとか
0400nobodyさん
2009/05/06(水) 13:42:27ID:???HTML::Form(LWPの付属モジュール)
WWW::Mechanize(LWPのスーパークラス的なモジュール)
0404397
2009/05/06(水) 19:32:33ID:???同じルーチンの中でやると普通に綺麗に書き出されるんだけど
別のサブルーチンに引き渡すと、データそのままで、各行の頭に半角空白が1個ずつ挿入されてる、って感じです。
>>399
&sub (@hoge);
で渡して、受け取る側で
@data = $_[0];
と書いてます。
0406nobodyさん
2009/05/06(水) 21:07:16ID:???0408nobodyさん
2009/05/06(水) 21:33:27ID:???0409nobodyさん
2009/05/06(水) 23:48:47ID:???簡単なスクリプト作ってみたらイイ感じに出来た。
無事思惑通りのことができそう。
今まで URL を解析して UserAgent で get していたのが楽になる (T-T)
0411nobodyさん
2009/05/07(木) 12:48:09ID:???0412キュウティイハニ-
2009/05/07(木) 17:35:14ID:EGaRRr78use LWP::Simple;
getstore('http://www.yahoo.co.jp','d:\\test\\nikki.tmp2');
しかし、上記のyahooの場合は全てが取得されますが、
サイズの大きいサイトでは途中まで切れてしまいます。
(サイズの大きいサイトのサンプルが具体的に言えません、すみません)
サイズは128kBくらいまでなら、取得できるようです。
取得サイズを指定する何かがあるのでしょうか?
0413nobodyさん
2009/05/07(木) 18:57:38ID:???getstore('http://d.hatena.ne.jp/diarylist?mode=lirs','./lirs.dat');
> dir lirs.dat
2009/05/07 18:56 57,602,778 lirs.dat
1 File(s) 57,602,778 bytes
?
0414キュウティイハニ-
2009/05/07(木) 20:20:10ID:EGaRRr78回答ありがとうございます。
ためしためしで先程からテストしていたんですが、
どうも、対象のサイトに依存するようです。。。
0415nobodyさん
2009/05/07(木) 21:00:25ID:???そちらの環境で同様の現象が起こるサイトが出せない限り、これ以上は無理だね
0416nobodyさん
2009/05/07(木) 21:40:07ID:???0417キュウティイハニ-
2009/05/07(木) 21:47:42ID:EGaRRr78あるアクセス解析のページなんですが、
IEでソース表示を行った場合も、
同様の場所で、ソースが切れています。
ブラウザ上では切れていなく表示されているのに。
なんで???
0418nobodyさん
2009/05/07(木) 22:02:57ID:???ttp://sakura_editor.at.infoseek.co.jp/
0419nobodyさん
2009/05/07(木) 22:03:41ID:???ttp://www2a.biglobe.ne.jp/~qpon/html/ie_edit.htm
0420キュウティイハニ-
2009/05/08(金) 16:41:50ID:CAAVVdSZこんな感じでもダメでした。。。
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
$ua->timeout(30);
$ua->agent('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)');
$req = HTTP::Request->new(GET => $kw_url);
$res = $ua->request($req);
$status = $res->status_line;
$content = $res->content;
0421キュウティイハニ-
2009/05/08(金) 16:42:32ID:CAAVVdSZ自動的にプログラムで取得してファイルに書きたいのです。
0422nobodyさん
2009/05/08(金) 16:44:17ID:???$ua->timeout(3000000000000000000000000000000000すげえ);
0423nobodyさん
2009/05/08(金) 16:49:19ID:???テストしてみたい
0424キュウティイハニ-
2009/05/08(金) 17:05:05ID:CAAVVdSZ具体的に教えられないんです。
i2iアクセス解析のサーチワード一覧のソースが欲しいんです。
一例ですが、以下のようにget出来ますが、4番目の"q=%00"が出てくると、
ソースがちょん切られるみたいです。(※のところに[EOF]がくる)
<td align="right">3</td>
<td><a href=http://www.google.co.jp/search?hl=ja&q=BOSS&lr= target=_blank>BOSS</a></td>
<td align="right">4</td>
</tr>
<tr>
<td align="right">4</td>
<td><a href=http://www.google.co.jp/search?hl=ja&q=%00&lr= target=_blank>※
0425nobodyさん
2009/05/08(金) 17:08:59ID:???てめーで解決しろよ
0426キュウティイハニ-
2009/05/08(金) 17:11:45ID:CAAVVdSZそこで、切られるみたいです。
でも、ブラウザ(IE8)上では、切れていないんです。
0427キュウティイハニ-
2009/05/08(金) 17:12:10ID:CAAVVdSZ冷たいなぁ。。。
0428キュウティイハニ-
2009/05/08(金) 17:13:41ID:CAAVVdSZ0429nobodyさん
2009/05/08(金) 17:20:09ID:???0430キュウティイハニ-
2009/05/08(金) 17:27:31ID:CAAVVdSZ顕著な検索エンジンを経由してきた検索語と回数をカウントしたいんですが、簡単なんですか?
0432キュウティイハニ-
2009/05/08(金) 17:39:56ID:CAAVVdSZ死ぬほどないんですけど><
http://www.google.co.jp/search?hl=ja&q=apache+referer+%E9%9B%86%E8%A8%88+%E6%A4%9C%E7%B4%A2%E8%AA%9E+perl&btnG=%E6%A4%9C%E7%B4%A2&lr=
0433nobodyさん
2009/05/08(金) 18:01:07ID:???q=apache+log+perl
\0 でつまずいてるようだから今後も苦労すると思う。
0434キュウティイハニ-
2009/05/08(金) 18:15:10ID:CAAVVdSZよくわからない。
apacheのログを入力として、
検索語(日本語)とその検索回数を
表示してくれるだけでいいのに。
0435nobodyさん
2009/05/08(金) 18:20:44ID:???0436キュウティイハニ-
2009/05/08(金) 18:21:55ID:CAAVVdSZ0437キュウティイハニ-
2009/05/08(金) 18:24:51ID:CAAVVdSZリファラーにq="なんたら"
って書いてある"なんたら"の
"なんたら"と、その回数が知りたいのです
0438nobodyさん
2009/05/08(金) 18:37:21ID:/tMyodOD>>432から"検索語"を抜いた"apache referer 集計 perl"でググっただけで死ぬほど出てくるというのに。
0439nobodyさん
2009/05/08(金) 18:38:33ID:/tMyodODopen IN, '<', '/apache/logs/access.log';
my%ref_cnt;foreach my$log(<IN>){$log=~m/^.*? .*? .*?\[.*?\] ".*?" [0-9]{3} .+ "(.*?)" ".*?"/;$ref_cnt{$1}++;}
my@keys=sort{$ref_cnt{$b}<=>$ref_cnt{$a}}keys%ref_cnt;for my$key(@keys){print$ref_cnt{$key}.":".$key."\n";}
0440キュウティイハニ-
2009/05/08(金) 18:39:16ID:CAAVVdSZうむ!頑張ってみる!
0441nobodyさん
2009/05/08(金) 18:42:59ID:???%00 は \0 の NULL 文字となる
だったような気がするんだマイハニー
0442キュウティイハニ-
2009/05/08(金) 18:52:02ID:CAAVVdSZ検索語が知りたいんです。
0443nobodyさん
2009/05/08(金) 18:54:48ID:/tMyodODもう君Analogでも使ってればいいと思うよ
0444キュウティイハニ-
2009/05/08(金) 18:56:58ID:CAAVVdSZバッチで取得したいのですぅ
0445nobodyさん
2009/05/08(金) 18:57:50ID:???0446nobodyさん
2009/05/08(金) 18:59:36ID:???0447キュウティイハニ-
2009/05/08(金) 19:01:25ID:CAAVVdSZ0449nobodyさん
2009/05/08(金) 19:49:09ID:???はい次の方どーぞ
0450アルモコニ
2009/05/08(金) 19:54:33ID:???米を煮たいと所存だす。
http://www.google.co.jp/search?hl=ja&q=%E3%83%8B%E3%83%AB%E3%82%B3%E3%83%A1&lr=
ケロロゲ?ムで火をつけリソウシを入れました。
いいぐあいにリソウシは紫の汁を出し、
結局、アルモコニでした。
http://www.google.co.jp/search?hl=ja&q=%E3%82%A2%E3%83%AB%E3%83%A2%E3%82%B3%E3%83%8B&lr=
0451nobodyさん
2009/05/08(金) 20:25:18ID:???試したら圧倒的になったんだけど。
文字列だとGuttman Rosler変換が断トツだった。
0452nobodyさん
2009/05/08(金) 21:03:07ID:???0453nobodyさん
2009/05/09(土) 00:02:11ID:???0454nobodyさん
2009/05/09(土) 01:54:05ID:???0455nobodyさん
2009/05/09(土) 10:19:40ID:???0456nobodyさん
2009/05/09(土) 10:20:01ID:???0457nobodyさん
2009/05/10(日) 08:47:53ID:P8pR48B+0458nobodyさん
2009/05/11(月) 20:26:11ID:???http://www.google.co.jp/search?q=%CE%B4%CE%B8%CE%BD%CE%B2&lr=
0459nobodyさん
2009/05/13(水) 13:11:51ID:oMl7P+AAxamppの環境で、Shift_JISで書いたコードが、問題なく動作するように
use encoding 'shiftjis', STDOUT => "shiftjis";
を加えたのですが、即座に動かなくなりました。
搭載されているperlはvar5.8.7なので、動かないはずがないのですが・・・
どなたか原因ご存知ありませんでしょうか?
0460nobodyさん
2009/05/13(水) 13:24:51ID:???0461nobodyさん
2009/05/15(金) 15:32:32ID:???一応結果は求めたものなのですが、正解なのかどうかわかりません
普通はこうやるとか、間違ってるからこう直せってのがあったら教えてください
my $url = 'http://www.google.co.jp/';
my($scheme, $userinfo, $host, $port, $path, $query, $anchor) =
$url =~ m/
(https?|shttp):\/\/
(?:((?:[-_.!~*'()a-zA-Z0-9;:&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*)@)?
(\d+\.\d+\.\d+\.\d+|(?:[a-zA-Z0-9][\-a-zA-Z0-9]*[a-zA-Z0-9]\.)*[a-zA-Z0-9]*)
(?::(\d+))?
(?:((?:\/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f])*)*))?
(?:\?((?:[-_.!~*'()a-zA-Z0-9;\/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*))?
(?:\#((?:[-_.!~*'()a-zA-Z0-9;\/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*))?
/ox;
0463nobodyさん
2009/05/16(土) 17:28:43ID:C7qkfi2duse encoding 'shiftjis', STDOUT => "shiftjis";
print "Content-Type:text/html\n\n";
my $cgi = new CGI::Lite;
my %g = $cgi->parse_form_data('GET');
print $g{'all-text'};
---表示結果---
\x{0093}\x{008c}\x{008b}\x{009e}\x{0093}s\x{008d}]\x{008c}Ë\x{0090}\x{00ec}\x{008b}\x{00e6}
(本当は「東京都江戸川区」とprintされる)
CGI::Liteは最新版。perl5.8.5 unix環境です
0464nobodyさん
2009/05/16(土) 18:01:49ID:???0465nobodyさん
2009/05/17(日) 15:36:49ID:dGMXPYwmurl_encodeはサブルーチンで普通に使えています
上記のように$BBに入っている文字列の中の「:」だけを全てエンコードしたいのですが、上記のコードだと「:」が「&url_encode(:)」という文字列に変換されてしまいます
正規表現の中でサブルーチンを呼び出すにはどうすればいいでしょうか?
0466nobodyさん
2009/05/17(日) 15:47:36ID:???0467nobodyさん
2009/05/18(月) 01:28:52ID:???0468nobodyさん
2009/05/18(月) 05:31:12ID:???「マニュアルに書いてあることを質問するな」とか云うはるか前の話として、
マニュアルをちょっと調べれば、3秒とか、長くても20秒くらいで
解決することを、わざわざ文章書いてポストするって、
どんだけ時間の無駄づかいなの?
0469nobodyさん
2009/05/18(月) 09:09:13ID:???0470nobodyさん
2009/05/18(月) 09:58:34ID:???$BB =~ s/:/&url_encode(':')/ge;
よりも↓の方が負荷がかからない
$BB =~ s/:/%3a/g;
と教えるだろうけどPerl使ってて負荷のこと言うと叩かれそうだから言わない
0471nobodyさん
2009/05/18(月) 12:45:23ID:???my $safe = uri_escape($bb, ":");
これで、おk。
0473nobodyさん
2009/05/18(月) 20:45:50ID:gm/uB6Clおまえさんには「教えてください」なんて口が裂けても言わないから
ダイジョウブダヨ。
0474nobodyさん
2009/05/19(火) 01:35:37ID:???0475nobodyさん
2009/05/19(火) 18:36:32ID:???サーバがUnixなので改行コードはLFにしてあります。アスキーで転送しました。
use strict;が原因かと思ってコメントアウトしたけど500のままなのです。
0477nobodyさん
2009/05/19(火) 19:34:05ID:???おお!動いた!ありがとうございます。
FFFTPの方で700に設定してたのが悪かったのかな・・・。他はこれで動いてるのに。
■ このスレッドは過去ログ倉庫に格納されています