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/
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に設定してたのが悪かったのかな・・・。他はこれで動いてるのに。
0478nobodyさん
2009/05/19(火) 19:44:30ID:???当たっちゃったか
apacheは、apacheユーザとかnobodyユーザとかで動くから、
700じゃ実行権限ないの。この設定はhttpd.confで出来るよ。
他で動いてる理由は、4700か2700になってるとかかもしれないね
もしくはrootユーザに設定されてるか。もしされてるなら危険なので変えよう。
0479nobodyさん
2009/05/19(火) 20:22:03ID:???0481nobodyさん
2009/05/19(火) 20:38:57ID:???0482nobodyさん
2009/05/19(火) 20:40:03ID:???stat
map
sort
0483nobodyさん
2009/05/19(火) 20:44:51ID:???0484nobodyさん
2009/05/19(火) 20:48:58ID:???0485nobodyさん
2009/05/19(火) 20:50:50ID:???while(<IN>){
print $_;
}
close IN;
時刻も取りたいなら、-tlにして、\sでsplit
0486nobodyさん
2009/05/19(火) 20:51:15ID:???0487nobodyさん
2009/05/19(火) 21:15:24ID:???@flies = `ls -tr`;(古い順)
0488nobodyさん
2009/05/19(火) 21:20:16ID:???use strict;
use File::stat;
opendir(DIR, "./") or die;
my @file = readdir(DIR);
closedir(DIR);
my @new = ();
for (@file) {
my $fi = stat($_);
push @new, {name=>$_, mtime=>$fi->mtime};
}
@new = sort { $a->{mtime} <=> $b->{mtime} } @new;
あとは@newが順番は更新日時順でハッシュの配列になってるから。
0489nobodyさん
2009/05/19(火) 21:22:11ID:???..
↑これ消さないと
0490nobodyさん
2009/05/19(火) 21:26:11ID:???まずこれが理解できるようになってから、自分で消してもらうってことで。
0491nobodyさん
2009/05/19(火) 21:28:16ID:???0492nobodyさん
2009/05/19(火) 21:30:22ID:???俺map嫌いなんだよ
0493nobodyさん
2009/05/19(火) 21:36:48ID:???opendir(IN, $dir);
@files= map{$_->[0]}sort{$a->[1]<=>$b->[1]}map{[$_,(stat("$dir/$_"))[9]]}grep(-f"$dir/$_", readdir(IN));
closedir(IN);
0494更新日時でソート
2009/05/19(火) 21:49:48ID:???0495nobodyさん
2009/05/19(火) 21:52:56ID:???0496nobodyさん
2009/05/19(火) 23:18:27ID:???0497nobodyさん
2009/05/19(火) 23:28:19ID:???0498nobodyさん
2009/05/20(水) 00:12:40ID:???■ このスレッドは過去ログ倉庫に格納されています