トップページ⇒php
1001コメント296KB

Perlコーディング初心者質問スレ Part 58

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/08/06(水) 22:54:32ID:???
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1203935151/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0449nobodyさん2008/11/28(金) 11:32:22ID:???
量の問題だろ
0450nobodyさん2008/11/28(金) 12:22:28ID:???
株式チャートのPNG画像なら、大きくても100kバイト程度だと思うが、
それで問題あるなら、Image::Magickを使用することから見直した方がいい。
0451nobodyさん2008/11/28(金) 13:23:12ID:???
まだreadしてないんだからkernelがメモリ使ってるかもしれないけどperl的にはオンメモリじゃないよね?

ReadもBlobToImageもだめみたいだったので
SOCKETから一回取り出してperlでバッファリングして
imagemagickの中でもバッファリングして
と無駄が多いなと感じて書きましたが
言われてみてればたしかにたいしたサイズでもないですね
0452nobodyさん2008/11/28(金) 17:30:25ID:f7u8ti6k
#!/usr/bin/perl -W

use strict;
use CGI::Carp qw(fatalsToBrowser);
use warnings;

use CGI;
use LWP::UserAgent;
use Image::Magick;

my $ua = new LWP::UserAgent;
$ua->agent('IE5');
$ua->timeout(10);
my $response = $ua->get("http://i.yimg.jp/images/evt/ramen2008/shop/2/shop_il01.gif");
my $data = $response->is_success ? $response->content : undef;

#if(defined($data)){
# print "Content-Type: image/gif\n\n";
# print $data;
#}

my $image = new Image::Magick;
$image->BlobToImage($data);

print "Content-Type: image/png\n\n";
print $image->ImageToBlob(magick => 'png');
0453nobodyさん2008/11/28(金) 19:56:27ID:???
439です。

452さんの回答で出来てしまいましたね…。すごいです。

my $data = $response->is_success ? $response->content : undef;
↑の部分をSOCKETで実現する方法を実装できなくて悩みまくりました。

(SOCKET画像取得処理)
my $data = SOCKETで取得した画像
↑を実装する方法は引き続き勉強します。
0454nobodyさん2008/11/28(金) 19:59:50ID:???
無理にSOCKET使わなくても…
0455nobodyさん2008/11/28(金) 20:16:09ID:???
>無理にSOCKET使わなくても…
まあ、そうなんですよね。

SOCKET使える環境で必ずLWPを使えるのであれば(よく知りませんが…)、
ほとんど意味ないですね。処理性能面でSOCKET優位等の理由がない限り。

みなさまのおかげでやっと実現できました。ありがとうございます。
0456nobodyさん2008/11/29(土) 22:46:07ID:???
キチガイ回答者のグダグダがたまらんスレだなw
0457nobodyさん2008/11/30(日) 01:47:08ID:???
439です。みなさんのおかげでpng→gifはうまくいきましたが、
設置方法で分からないことがあります。

今回作成したPerlのCGIをpng2gif.cgiとして、
urlをパラメータとし、以下のように出力します。
print "Content-Type: image/gif\n\n";
print $image->ImageToBlob(magick => 'gif');

htmlに
�@<img src="png2gif.cgi?http://chart.cn.yahoo.com/t?s=000001.SS">
と記述すれば問題なく動きます。

が、SSIとして記述する場合、どうすればよいのでしょうか?
�A<img src="<!----#include virtual="png2gif.cgi?http://chart.cn.yahoo.com/t?s=000001.SS"-->">
�B<!--#include virtual="png2gif.cgi?http://chart.cn.yahoo.com/t?s=000001.SS"-->

�Aは<img src ="">となりNG
�Bはバイナリデータがそのまま出力(GIF89a〜文字化けの羅列)されてNG

�Bはcgi側でgif形式で出力しているので理解できるのですが、�@と�Aで動きが違うのはどうしてなのでしょう?
SSIとしてこのcgiを動かすにはどうすればよいのか分かりません…。
0458nobodyさん2008/11/30(日) 02:09:05ID:o6oyERaL
まずね、○に数字の文字は使わないように

(3) は src には PATH であったり URL を指定すべきところにバイナリを出力してるから

(2) は t?s の部分をエスケープしてみたり、<!---- をちゃんと書き直してみたりしたらどうでしょう?
0459nobodyさん2008/11/30(日) 02:54:50ID:???
ご指摘ありがとうございます。以下のように記述しました。

(0)<img src="png2gif.cgi?http://chart.cn.yahoo.com/t?s=000001.SS"><br>
(1)<img src="<!--#include virtual="png2gif.cgi?http://chart.cn.yahoo.com/t?s=000001.SS"-->"><br>
(2)<img src="<!--#include virtual="png2gif.cgi\?http://chart.cn.yahoo.com/t?s=000001.SS"-->"><br>
(3)<img src="<!--#include virtual="png2gif.cgi?http://chart.cn.yahoo.com/t\?s=000001.SS"-->"><br>
(4)<img src="<!--#include virtual="png2gif.cgi\?http://chart.cn.yahoo.com/t\?s=000001.SS"-->"><br>
(5)<!--#include virtual="png2gif.cgi?http://chart.cn.yahoo.com/t?s=000001.SS"--><br>
(6)<!--#include virtual="png2gif.cgi\?http://chart.cn.yahoo.com/t?s=000001.SS"--><br>
(7)<!--#include virtual="png2gif.cgi?http://chart.cn.yahoo.com/t\?s=000001.SS"--><br>
(8)<!--#include virtual="png2gif.cgi\?http://chart.cn.yahoo.com/t\?s=000001.SS"--><br>

結果
(0)正しい画像が出力される
(1)<img src="GIF89a〜文字化け〜"><br>
(2)<img src="[an error occurred while processing this directive]"><br>
(3)<img src=""><br>
(4)<img src="[an error occurred while processing this directive]"><br>
(5)GIF89a〜文字化け〜<br>
(6)[an error occurred while processing this directive]<br>
(7)<br>
(8)[an error occurred while processing this directive]<br>

タグ内にSSIを埋め込むことができないのでは?と思いましたが、結果を見ると問題なさそうです。
img srcのパラメータにバイナリデータをそのまま書いてしまっているように見えます。
img srcへの渡し方(ファイルを示すURL?)に問題がありそうです。難しい…。
0460nobodyさん2008/11/30(日) 12:17:00ID:???
HTMLは画像バイナリデータを解釈できないから、
img要素などを経由させるしかない。

つか、(0)をSSIに書いとけばいいんじゃないのか?
0461nobodyさん2008/11/30(日) 12:33:15ID:???
test.cgiを↓

#!/usr/bin/perl

print "Content-Type: text/html\n\n";
print "<img src=\"png2gif.cgi\?http://chart.cn.yahoo.com/t\?s=000001.SS\">";

で、htmlに

<!--#include virtual="test.cgi"--><br>

で表示できました。
後だしで申し訳ないのですが、ssiでやりたかったのはhtmlソース上にcgi名を
表示させたくなかったという理由があります。

png2gif.cgiの方をいじらないとだめそうですね。ありがとうございます。
0462nobodyさん2008/12/05(金) 20:58:52ID:???
> まずね、○に数字の文字は使わないように

なんで?
0463nobodyさん2008/12/05(金) 21:29:37ID:???
>>462
バカにいちいち構わずほっといてやれよw
0464nobodyさん2008/12/06(土) 00:31:10ID:???
変なことをしていないかぎり、モジュール内のメソッドで、
newのみがクラスメソッドで、それ以外のメソッドがインスタンスメソッドだと思って間違いないでしょうか?
0465nobodyさん2008/12/06(土) 01:12:27ID:???
そんなルールはない
0466nobodyさん2008/12/06(土) 14:04:47ID:nchXLVyQ
new aaa

と呼び出した時 aaa のなんのメソッドが呼ばれるの?

aaa->new は new が呼ばれてるのは分かるけど …
0467nobodyさん2008/12/06(土) 14:19:58ID:???
#!/usr/bin/perl

package aaa;

use strict;
use warnings;

sub aaa {
warn "aaa::aaa";
bless {}, shift;
}

sub new {
warn "aaa::new";
bless {}, shift;
}

package main;

use strict;
use warnings;

aaa aaa;
0468nobodyさん2008/12/06(土) 14:26:33ID:???
>>466
書き方が違うだけでnewを呼んでる。
new aaa ; # 間接オブジェクト記法
aaa->new ; # 直接オブジェクト記法
{ package Foo ; sub new { bless {}, shift } sub get { "hoge\n" } }
print Foo->new->get ; # 直接
これを間接で書くと
print +( get { new Foo } ) ;
0469nobodyさん2008/12/06(土) 14:55:41ID:???
Perl OO入門
http://www.nicovideo.jp/watch/sm5377306
0470nobodyさん2008/12/07(日) 00:51:48ID:5kiTreoU
なるほど
明示的に書いてやるかどうかの違いなワケっすね
0471nobodyさん2008/12/08(月) 22:17:51ID:H0AbHxek
質問です。

$mail = "[email protected]"

$mailから文字列 foo と @mail.com を抜きだすにはどうしたらいいでしょうか?
0472nobodyさん2008/12/08(月) 22:26:41ID:???
my ( $user, $addr ) = split /(?=@)/, $mail
0473nobodyさん2008/12/09(火) 00:53:33ID:1e6/3LhQ
\@ で大丈夫しゃない?
0474nobodyさん2008/12/09(火) 01:59:53ID:???
@mail.comじゃなくてmail.comでいいならね
0475nobodyさん2008/12/09(火) 06:21:12ID:???
そもそもこれ、
$mail = '[email protected]';
と書かないとダメだろ。俺も前に嵌ったことあるw
0476nobodyさん2008/12/09(火) 11:16:40ID:1e6/3LhQ
@ が1つしか存在しないであろう文字列を split してるんだから
分離後の後者側には @ はいらないでしょ

それに分離するってことはホスト名が欲しいワケだよね?
だったら @ は邪魔なゴミじやない?
0477nobodyさん2008/12/09(火) 11:18:20ID:???
use strict してなかったお前がバカだw
0478nobodyさん2008/12/09(火) 14:29:32ID:D4e6X4gI
>>472
できました!
ありがとうございます
@も含めて抜きだしたかったんです。
0479nobodyさん2008/12/09(火) 23:43:03ID:ope7KV64
hello worldを表示するcgiを作りたいのですが
本や入門サイトをあちこち見ても書き方が違うのです。
こちらの常連様方はどのように書いてますか?
0480nobodyさん2008/12/09(火) 23:52:30ID:???
print q aHello worlda
0481nobodyさん2008/12/10(水) 00:34:49ID:???
@echo off
echo content-type: text/plain
echo.
echo Hello World


これで出る
0482nobodyさん2008/12/10(水) 11:16:18ID:???
>>479
色んな書き方があると分かったなら、それも進歩のひとつです。
0483nobodyさん2008/12/10(水) 11:51:10ID:???
その書き方だとhtmlで出力したことにならないね
0484nobodyさん2008/12/10(水) 12:11:54ID:???
>echo.
この . 忘れると、echoはoffです。が出るんだよなw
0485nobodyさん2008/12/11(木) 01:03:04ID:???
whileの条件式に<FILEHANDLE>とすると$_に暗黙的に代入されますが、
IO::Fileみたいなオブジェクトで$fh->getlineとしても$_に代入されません。
暗黙的に$_に代入させる方法はないでしょうか
0486nobodyさん2008/12/11(木) 02:02:51ID:???
お前さんの言ってるgetline methodは恐らくIO::Handleのgetlineの事だろう。
で、お前さんの言ってる事がやりたくて、先人様がIO::Fileと言うラッパを生みだしたんだ。
use IO::File ;
my $fh = new IO::File;
if ($fh->open("< file")) {
while ( <$fh> ){ print ; }
$fh->close;
}
0487nobodyさん2008/12/11(木) 02:10:00ID:???
継承してるからIO::Fileでgetlineも使えるんだね。
失敬。
0488nobodyさん2008/12/11(木) 02:22:01ID:???
明示的に変数に入れないと気がすまない性格の俺からすると $_ を積極的に使いたがる人のスクリプトはなんかヤダw
0489nobodyさん2008/12/11(木) 09:11:50ID:???
俺は$_で済むものをいちいち自前の変数つくって入れる人のスクリプトなんてだるくて嫌だなw
0490nobodyさん2008/12/11(木) 11:02:32ID:???
プログラミング言語では明示的に宣言するのが普通だな
文字数制限があったBASICの時代ならいざ知らず
0491nobodyさん2008/12/11(木) 12:04:21ID:???
他の言語無関係に。
シュワルツ変換とかで↓みたいなコードを曝されたらねえ、、、
my @foo
 = map { my $ref = $_ ; $ref->[0] }
  sort{ $a->[1] <=> $b->[1] }
  map { my $val = $_ ; my $ref = [ $val , length $val ] ; $ref ; }
  @bar
 ;
必要に応じて、適宜採用するのが良いと思うよ。
my @foo
 = map{ $_->[0] }
  sort { $a->[1] <=> $b->[1] }
  map { [ $_, length $_ ] }
  @bar
  ;
0492nobodyさん2008/12/11(木) 14:21:39ID:???
>489
貴様、ラリー先生ですね!
0493nobodyさん2008/12/12(金) 13:44:42ID:???
>>491
だからどうした?
0494nobodyさん2008/12/12(金) 18:35:52ID:???
Perlの時代来てるのになんか盛り上がらんなぁ
0495nobodyさん2008/12/12(金) 20:03:18ID:???
で、japタンはもういないの?
0496nobodyさん2008/12/12(金) 22:19:56ID:???
入力した文字を音声化するモジュールってありますか?
0497nobodyさん2008/12/12(金) 23:14:49ID:???
>>496
http://search.cpan.org/search?q=speech&m=all&n=100
http://search.cpan.org/search?q=speak&m=all&n=100
0498nobodyさん2008/12/12(金) 23:59:34ID:t4dUYMwZ
文字の入れ替えをスマートに書きたいのですが。
たとえばABCという文字の1番目と3番目を替える場合

$hoge = "ABC";
$s1 = substr($hoge,1,1)
$s2 = substr($hoge,3,1)

0499nobodyさん2008/12/13(土) 00:01:31ID:???
途中で送信してしまいました。

$hoge = "ABC";
$s1 = substr($hoge,1,1);
$s2 = substr($hoge,3,1);
substr($hoge,3,1) = $s1;
substr($hoge,1,1) = $s2;

で、できると思いますが、もっとスマートなやり方はないでしょうか?
0500nobodyさん2008/12/13(土) 00:20:33ID:???
2行削ってみた

$hoge = "ABC";
$s1 = substr($hoge,1,1);
substr($hoge,1,1) = substr($hoge,3,1,$s1);
0501nobodyさん2008/12/13(土) 00:24:19ID:???
スマートというのが行数少なくすることなら正規表現で
0502nobodyさん2008/12/13(土) 00:29:52ID:???
$hoge =~ s/^(.)(.)(.)/$3$2$1/ ;

ちなみに君の書いたコードだとACB
0503nobodyさん2008/12/13(土) 00:42:46ID:???
$hogeが三文字固定なら
$hoge = reverse $hoge ;
じゃなきゃ
substr $hoge, 0, 3, reverse substr $hoge, 0, 3;
ちゅー手も。
0504nobodyさん2008/12/13(土) 00:51:10ID:???
>>501-503
深夜ありがとうございます。
文字数は非固定で、入替える文字もランダムですので、正規表現は無理そうです。

>>ちなみに君の書いたコードだとACB
確認せず書いてすみませんでした。
$hoge = "ABC";
$s1 = substr($hoge,0,1);
substr($hoge,0,1) = substr($hoge,2,1,$s1);
ですね。

もうちょっと考えてみます。
0505nobodyさん2008/12/13(土) 01:01:23ID:???
正規表現ではムリでsubstrでは書けるコードっていまいちルールがわからんなぁ。。
0506nobodyさん2008/12/13(土) 15:58:49ID:???
> Perlの時代来てるのになんか盛り上がらんなぁ

Perl が来た時代なんてあったのか?
0507nobodyさん2008/12/13(土) 19:27:09ID:???
質問です。よろしくお願いします。
ttp://www.hamakin.net/search/my_page_rank.html
このツールみたいに演算中に「演算中」と出しておいて終わったら
結果を表示したいのですがわかりません。。

これみたいなキーワードチェックツールを作っていてツール自体は
作れそうなのですが、「演算中」表示が解決できず困っています。
本当は、「演算中」ではなく、「10位まで終了」「20位まで終了」
としたいのですが、どちらもさっぱりで。。
0508nobodyさん2008/12/13(土) 19:36:16ID:???
それはperlの質問じゃないっぽいな。
だいたい、本当にそんな時間かかってるなら鯖の負担が大変だw
0509nobodyさん2008/12/13(土) 20:08:28ID:???
my $hoge = "ABC";
substr($hoge, 0, 1, substr($hoge, 2, 1, substr($hoge, 0 , 1)));

無理に文字列で操作しなくても、配列で操作してもいいんじゃないか。

my @hoge = split //, $hoge;
@hoge[0, 2] = @hoge[2, 0];
$hoge = join('', @hoge);

実際の操作が一回ならアレだけど、複数回適用するなら配列の方が楽。
0510nobodyさん2008/12/13(土) 20:44:38ID:???
507のツールは☆が回ってる間って10秒くらいだけど、サーバの負担って
すごいの?
レンタルサーバでやろうとしてたんだけど、迷惑かな。。
0511nobodyさん2008/12/13(土) 21:10:00ID:???
ajaxじゃねーの
どうでもいいが
0512495-5002008/12/13(土) 21:25:19ID:???
>>509
配列の案までありがとうございます。
substr($hoge,0,1) = substr($hoge,2,1,substr($hoge,0,1));
で一行にまとめたのですが、
substr($hoge, 0, 1, substr($hoge, 2, 1, substr($hoge, 0 , 1)));
なんて事までできるのですね。
どれが一番よいかベンチとって、使用したいと思います。
0513nobodyさん2008/12/13(土) 21:32:03ID:???
507です。
ソースみるとjavascript使ってないんです。いっこも。
perlかどうかは分からないんですが。
「10位まで終了」「20位まで終了」 ってのは無理なのかな。。
0514nobodyさん2008/12/13(土) 22:44:05ID:???
>>507
見たけど、本来直接結果を表示できるところを、演算中と表示させるだけのcgiを間にはさんでしばらく表示し、
metaタグで結果ページのcgiに移動しているだけのようですね。フォームデータはそのまま結果ページcgiに渡すと。
★が動くのはアニメgifでしたよ。ワンクリ詐欺の技法。
まともに経過を表示させる方法を書こうと思ったけど、板違いなのでやめました。Webprog板へどうぞ。
0515nobodyさん2008/12/13(土) 22:51:42ID:???
>>514
いやいや、板は合ってるw
0516nobodyさん2008/12/14(日) 14:24:32ID:???
507です。
514さま。感謝です!演算中表示はできましたです!
cgiをはさむってのは思いつきませんでした。
板違いでなければ、経過表示もお願いしたいのですが。。
あと、共有サーバでやるべきかどうか、どう思いますか??
0517nobodyさん2008/12/14(日) 17:10:12ID:???
stringifyとかwantarrayってどこで定義されてるんですか?
後者はperldoc -fで出るけど前者は出ないしググっても全然情報がないす
0518nobodyさん2008/12/14(日) 17:26:46ID:???
http://rbach.priv.at/2007/Perl-CHM/
ここにある chm とかサクっと検索できるし見てみるのどうよ

wantarray は、perlfunc に書いてあるね。
stringify は、各モジュールで勝手に文字列化するためのメソッド定義してるとかじゃね。
0519nobodyさん2008/12/14(日) 17:31:24ID:???
>>518
ありがとうございます、探してみます。
stringifyはcatalystで $c->path_to('hoge/huga')->stringify とかしたときのが知りたかったのでcatalystのソース読んでるところでした
0520nobodyさん2008/12/14(日) 17:39:22ID:???
package Catalyst に sub path_to があるところまではわかりましたか。
その path_to のなかでつかってる Path::Class::Dir, Path::Class::File に
それぞれ stringify メソッドが定義されているよ。
0521nobodyさん2008/12/14(日) 17:46:22ID:???
今そこ読んでるところです。
依存モジュールが無いのでこの程度なら頑張れば読めそうっす
ありがとうございました。
0522nobodyさん2008/12/14(日) 17:48:41ID:???
依存モジュール無いじゃなくてFile::Specとかありました><
0523nobodyさん2008/12/14(日) 18:06:05ID:???
全部よもうとせずに必要なところを少しずつ読むといいかも。

あとは、初めて目にするモジュールがあれば、
CPAN で検索してみればいいんじゃないかと思う。
http://search.cpan.org/

死にゆく言語だががんがってくれ!
0524nobodyさん2008/12/14(日) 18:22:07ID:???
死にそうなんじゃなくて枯れてるだけです><
0525nobodyさん2008/12/14(日) 18:45:13ID:???
>>523
今後伸びていく言語は何だと思いますか?
0526nobodyさん2008/12/14(日) 19:46:28ID:???
>>525
それスレチじゃね
0527nobodyさん2008/12/16(火) 13:59:20ID:vcMtnNeb
URLの解析を行っているのですが、CGIにGETメソッドでパラメータを渡す場合、
以下のように "?" でURLとパラメータを区切ると思います。

http://server/path?name1=value1&name2=value2

しかし、あるサイトでは"?"を使わずに"/"が区切り文字になっているようです。

http://server/path/name1=value1&name2=value2

このような記法は普通に利用されるものでしょうか?
詳しく解説しているサイト(RFC)等がありましたら教えて下さい。
0528nobodyさん2008/12/16(火) 14:21:14ID:???
mod_rewrite の範疇なので、鯖板の方で聞いてみては如何でしょうか?
0529nobodyさん2008/12/16(火) 14:25:49ID:???
>>527
それPerl関係ない。
Webサーバでそーゆー風に処理している
0530nobodyさん2008/12/16(火) 14:30:11ID:???
でも、何で区切り文字だけ変えるんだろう。折角なら、.htmlにした方がSEO対策としては良くね?
スレ違いスマソ
0531nobodyさん2008/12/16(火) 15:33:00ID:???
>>527
例があやしすぎるが、、、
PATH_INFO使ってんじゃないの?
0532nobodyさん2008/12/16(火) 16:01:55ID:???
>>527
PATH_INFO
05335322008/12/16(火) 16:02:23ID:???
ああ531見えてなかった申し訳><
0534nobodyさん2008/12/16(火) 17:47:44ID:???
>>527
【Apache】mod_rewriteについて語るスレ
http://pc11.2ch.net/test/read.cgi/php/1023791370/

探せばどっかに答えがあるというか、ほとんどその類の質問しかないスレ。
0535nobodyさん2008/12/16(火) 20:34:45ID:???
use overloadについて詳しく解説されているサイト、
もしくはoverloadを有効に使っているモジュールを教えてください。
0536nobodyさん2008/12/16(火) 21:24:29ID:???
DateTime
0537nobodyさん2008/12/16(火) 21:26:06ID:???
>>535
http://search.cpan.org/dist/perl-5.10.0/lib/overload.pm
http://perldoc.jp/docs/perl/5.6.1/overload.pod
0538nobodyさん2008/12/16(火) 21:47:12ID:???
>>535
使用例としては、Math::BigIntが面白いと思う。
0539nobodyさん2008/12/17(水) 14:11:43ID:???
>>536-538
ありがとう。見てみる
0540nobodyさん2008/12/25(木) 22:41:08ID:???
Web::Scraperで質問です。

http://www.google.co.jp/m?eosr=on&q=hoge&site=mobile&mrestrict=chtml&start=0&sa=X&oi=blended&ct=more-results
の、検索結果に引っかかったURLを抽出しようと、以下のコードを書きました。

my $url = 'http://www.google.co.jp/m?eosr=on&start=0&site=mobile&sa=N&mrestrict=chtml&q=hoge';
my $scraper = scraper {
  process '.padbottom a', "link[]" => '@href';
  process '.sftr a', "next" => '@href';
  result qw/link next/;
};

my $uri = new URI($url . $word);
my $scraped = $scraper->scrape($uri);

for my $u (@{$scraped->{link}}) {
  print "$u\n";
}

結果は、10件の検索結果に加え、「次の10件」と「PCサイトを見る」のリンクまで取れてしまいました。
検索結果のクラスは<div class="padbottom">で、「次の10件」と「PCサイトを見る」のクラスは<div class="sftr center">なのに、何故この余計な二つが取れるのでしょうか?
どうすればこの余計な二つを除いた結果が取得できますか?
0541nobodyさん2008/12/28(日) 03:49:15ID:???
process '.padbottom .padbottom a', "link[]" => '@href';

って書けばよさそう。
いろいろ省かずに動くコードを gist に貼ってよ。
0542nobodyさん2008/12/30(火) 07:46:25ID:???
cronで走らせてるperlスクリプトを、時々任意に走らせたいときがあって、
webブラウザにアドレスを入れて、CGIを直接叩いているのですが、HTMLを返さないので、
ちゃんと実行されるものの、当然500エラーになります。

シェルから走らせてるか、HTTPで走らせてるかを判別できるような環境変数などはありますか?
0543nobodyさん2008/12/30(火) 08:02:24ID:???
$ENV{GATEWAY_INTERFACE}=~ /^CGI/ が真か偽か
0544nobodyさん2008/12/30(火) 08:11:45ID:???
>>543
thx;
0545nobodyさん2009/01/11(日) 00:46:35ID:???
1: 自分はこういう事がしたい。
携帯メールの添付ファイルをimagemagickで変換→送信元へ返信
2: それでこんな風にやってみたが・・・
A.メール受信してスクリプトを起動(実装済)
B.添付ファイルを抽出
C.添付ファイルをimagemagickで変換
D.変換後添付ファイルを送信元へ送信
(BCDは同一モジュール)
3: こんなエラーが出て上手く行かなかった。
Bの添付ファイルを抽出する処理において、ひとまず添付ファイルを出力してみようとしたところうまくいきません。
変更前(テンポラリファイルを作成するバージョン)はうまくいくのですが、$parser->output_to_core(1);にすると
うまく動きません(正常終了するけどファイルは作られない)。単純にoutput_to_core(1);とするだけではだめなのでしょうか?
#!/usr/bin/perl
use File::Basename;
use MIME::Parser;
my $parser = MIME::Parser->new
#$parser->output_dir('/tmp');  ←コメントアウト
$parser->output_to_core(1); ←追加
my $entity = $parser->parse(\*STDIN);
if($entity->is_multipart){
 $count = $entity->parts;
 for($i = 1; $i < $count; $i++){
  $path = $entity->parts($i)->bodyhandle->path;
  $filename = (fileparse($path))[0];
  open(FILE, "> /var/spool/mail/mail/$filename");
  print FILE $entity->parts($i)->bodyhandle->as_string;
  close(FILE);
 }
}

http://www.ksknet.net/cat28/mimeparser.html
0546nobodyさん2009/01/11(日) 23:01:08ID:lrs+Aq7A
一行づつプリントしたいのに、一気に出てきます(><)
どうすればいいですか?

#!/usr/bin/perl

use strict;
use Win32::Clipboard;
$| = 1;

my $clip = Win32::Clipboard();
$clip = $clip->GetText();
foreach (split(/\n/,$clip)) {
print $_;
sleep 1;
}
exit;
0547nobodyさん2009/01/11(日) 23:10:54ID:???
できたけど?
0548nobodyさん2009/01/11(日) 23:52:30ID:lrs+Aq7A
えーそうですか…。
どうしてだろう。
■ このスレッドは過去ログ倉庫に格納されています