[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 02/17 02:25 / Filesize : 157 KB / Number-of Response : 572
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Perlについての質問箱 43箱目



1 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 16:47:06 ]
"The duct tape of the Internet" こと、Perl についての質問箱です。
"There's more than one way to do it" ということで、
Perl の奥深さについて皆で語り合い、追求してまいりましょう。

CGI についての質問は板違いです。WEB プログラミング板でどうぞ。
CGI と Perlの区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: pc11.2ch.net/php/)

CGI の質問は答えが Perl と全然関係ない話に帰着する場合が
多かったりするので WEB プログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。

www.perl.org/get.html
● 2010/02/19 現在の最新版: 5.10.1

▼ 前スレ
Perlについての質問箱 42箱目
pc12.2ch.net/test/read.cgi/tech/1257139591/
リンク集は >>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは >>5-7 あたり

116 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 17:10:35 ]
>>112
ワイド文字列をunpack 'H*'に食わせると各文字の下位8bitしか
出てこないので、俺はこんな感じの自作サブルーチン
使ってる。

sub hexdump {
my($s) = @_;

$s =~ s/(.)/sprintf "[%x]", ord($1)/ge;
return $s
}

117 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 17:17:38 ]
>>116
それは>>86のプログラムに食わす前の$subjectの値が空白だったということか?
そんなら〓はどっから出てくんだよ。なんかおかしくね?

118 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 17:18:22 ]
ごめんアンカミスった。>>116じゃなくて>>114

119 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 17:29:42 ]
>>117
>>86を通る前の表示が記述ミスしていました。
「今日の天気は[雲の絵文字]です」が「cae56e29176f1367590a」となって
いて、同じ方法で>>86後の$subject_encodedをダンプすると空白になって
しまいました。

120 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 17:45:06 ]
>>119
雲の絵文字があるはずの7文字目の文字コードの下2桁が
13ってことだな。

雲はU+E63F
〓はU+3013

なのですでにその時点で〓になってる疑いが濃厚。

ttp://www.nttdocomo.co.jp/service/imode/make/content/pictograph/basic/index.html

121 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 18:41:41 ]
>>120
文字コードを調べたらUTF-8で3013は〓でした。perlを置くサーバーにメール
が届いた段階で〓に変えられているのでは、>>86を通しても…
〓にしないでメールを受け取る方法があるのでしょうか?

122 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 20:17:55 ]
絵文字を〓に変換してるのは携帯キャリアのメル鯖。

123 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 23:34:13 ]
>>121
gmailぐらいの交渉力があれば個別対応してもらえるけど、普通は
無理なんじゃないかなぁ。

124 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 09:14:35 ]
>>122>>123
まずは自社サーバーで〓に変換されていない状態で受け取れないと無理ですね。
同じようなプログラムに挑戦した方が結構いるのかと思っていました。



125 名前:デフォルトの名無しさん [2010/03/18(木) 13:38:39 ]
サーバー、クライアントがあります。
クライアントがサーバーに対して
GET リクエストを出します。

この際、クライアントは、
GET xxxx HTTP/1.1
User-Agent:test1


とUser-Agent のヘッダを追加します。
つまり、クライアントからのリクエスには、上のUser-Agnet
のヘッダが含まれています。

サーバー上のパールプログラムの中でで、このUser-Agent の
test1 を変数として保持したいのですが、具体的な実装方法に
ついてアドバイスをお願いします。

126 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 13:50:15 ]
>>125
$ENV{HTTP_USER_AGENT}

127 名前:デフォルトの名無しさん [2010/03/18(木) 14:10:35 ]
>>126

ありがとうございます。

128 名前:デフォルトの名無しさん [2010/03/18(木) 14:35:34 ]
GET /a.xml HTTP/1.1
Host: 192.16
Connection: close
User-Agent:
x-ModelName: pp-pppp
x-SDKVersion: 1.1.1

リクエストヘッダが上のようにあり、この中で特殊な、x-ModelName
の pp-pppp を取得したいと考えています。

しかし、
ttp://ja.wikipedia.org/wiki/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0#HTTP.E7.92.B0.E5.A2.83.E5.A4.89.E6.95.B0

をみますと、これに該当する環境変数がありません。
この場合、どうやって、pp-pppp を取得できますでしょうか?

129 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 15:07:57 ]
>>125,128
板違い

>>126みたいに板違いなのに回答するとこうやって図にのるのでみんなやめようね

130 名前:デフォルトの名無しさん [2010/03/18(木) 16:00:44 ]
>>129

どこの板に質問すればいいでしょうか?

131 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:03:03 ]
>>130
>>1読め

132 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 16:03:13 ]
>>130
>>1読め

133 名前:デフォルトの名無しさん [2010/03/18(木) 16:07:58 ]
>>131
>>132

thank you.

134 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 10:18:39 ]
初歩的な質問ですみません。
改行コードを変換したいんですが

・次行の先頭が 'A' で始まる場合のみ、行末の改行を削除

これを

perl -pe 's/\nA//g'

とやっても期待した結果になりません(全く完全に何も置換されない)
環境はCygwin1.7です。



135 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 10:42:54 ]
Treat string as multiple lines

136 名前:デフォルトの名無しさん [2010/03/19(金) 10:54:20 ]
>>134 s/\n(?=:A)//sg

137 名前:デフォルトの名無しさん [2010/03/19(金) 10:59:03 ]
間違えた
>>134 s/\n(?=A)//sg

138 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 15:57:58 ]
改行区切りで読み込んでるからだろ
perl -p0e 's/\n(?=A)//g'

139 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 06:01:46 ]
otsuneさんがウザくてamachangが爽やかなのはperlのせいですか?

140 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 06:21:57 ]
はてなに帰れ

141 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 08:43:37 ]
「処理済み」を表すフラグの変数名は何がいいですか?

142 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 08:56:41 ]
done

143 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 09:02:41 ]
ああ、それはいいな
finishとかprocessedとか、どうもしっくり来なかった

144 名前:デフォルトの名無しさん [2010/03/26(金) 13:04:37 ]
http::request の使用に関しての問題ですが、perl のプログラム(リフェレンス)の問題に
なりますのでここで質問させてもらいます。
ttp://search.cpan.org/~gaas/libwww-perl-5.834/lib/HTTP/Request.pm
によりますと、
$r = HTTP::Request->new( $method, $uri, $header_ref, $content )
で三番目の引数が、reference to an HTTP::Headers object or a plain array
reference of key/value pairs.
とリフェレンスになっております。
Can't call method "clone" on unblessed reference at C:/Perl/lib/HTTP/Message.pm
line 32.
*たしかに、message.pm 内では、$header = $header->clone; 
となっております。
my %header = ('User-Agent' => 'test_Agent','Content-Type' => 'application/x-www-form-urlencoded');
my $header_ref = \%header;
と三番目の引数をセットしています。
ttp://ftp.ics.uci.edu/pub/websoft/libwww-perl/archive/1999h1/0500.html
解決方法は、このあたりに書いてあるとおもうのですが、どのように三番目の引数をセットしてやればいいでしょうかアドバイス願います。



145 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:20:33 ]
>>144
HTTP::Headersのオブジェクトにしたら良いよ

my $h = HTTP::Headers->new('User-Agent' => 'test_Agent','Content-Type' => 'application/x-www-form-urlencoded');
この$hを第三引数に。

146 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:22:28 ]
plain array referenceって書いてあるんだから、ハッシュじゃだめだろ。

my @header = ('User-Agent' => 'test_Agent','Content-Type' => 'application/x-www-form-urlencoded');
my $header_ref = \@header;

147 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:25:15 ]
エラーメッセージの行のまわりを見ればこうなっているわけだが。

if (ref($header) eq "ARRAY") {
$header = HTTP::Headers->new(@$header);
}
else {
$header = $header->clone;
}

148 名前:デフォルトの名無しさん [2010/03/26(金) 13:50:13 ]
レスありがとうございました。
解決いたしました。

>>145
オブジェクトを指定してうまく動作しました。
>>146
plain array reference を読み間違えておりました。配列であってハッシュではありませんでした。
>>147
アドバイス ありがとうございました。


149 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 00:11:17 ]
perlから外部コマンドを実行して出力を格納するのに
バッククオートを使用しているのですが、
コマンドの文字列に$を含むような場合(環境変数とか)に
変数として展開されないようにする方法ってありませんでしょうか。


150 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 09:38:32 ]
$を適切にエスケープすりゃいいんじゃねーの?

またはperlipc(1)の例にあるsafe backtick

# add error processing as above
$pid = open(KID_TO_READ, "−|");

if ($pid) { # parent
while (<KID_TO_READ>) {
# do something interesting
}
close(KID_TO_READ) || warn "kid exited $?";

} else { # child
($EUID, $EGID) = ($UID, $GID); # suid only
exec($program, @options, @args)
|| die "can't exec program: $!";
# NOTREACHED
}


151 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 16:02:53 ]
お前らモダンPerlで書いてる?
俺はまだ勉強してないんだけど
モダンPerlの利点って何があるのか簡潔に書け。

152 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 17:14:04 ]
Perl4互換で書いてる。念のため

153 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 17:42:38 ]
Mooseとかは使わないけどPerl4互換とか絶対あり得ないわw

154 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 18:45:16 ]
自分で使うためのものしか考えてないから、5.10で追加されたものも普通に使って書いてる
いまさらPerl4互換とかないわー



155 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 18:49:09 ]
perl4ってどんなの?
localとか使うん?

156 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 19:38:50 ]
>>155
www2n.biglobe.ne.jp/~kajino/perl4ref/

157 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 19:48:28 ]
関数の引数は、localで受ける方が自然に見えるのは俺だけ?

sub func
{
    local($x, $y)=@_;

まあ慣れなんだけど

158 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 20:10:32 ]
おまえとKENTだけ

159 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 20:21:09 ]
myだろ普通
JavaとかPHPとか他の言語は自動的に局所変数だ

160 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 09:35:47 ]
最近は受ける変数名を考えるのが面倒だから
$_[0]とかを直接使ってるw

161 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 13:56:50 ]
pythonのctypesに相当するものはありますか?

162 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 14:03:11 ]
ん?PythonってCのやり方に頼りだしたんだw

163 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 14:04:47 ]
書き忘れた
CPANでCtypeで検索しろ

164 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 11:12:09 ]
swigしかないようです



165 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 12:40:00 ]
Archive::Zipの解説しているWebPageないでしょうか。
できれば日本語で・・・

ぐぐっても、圧縮/解凍のやりかたしか出てない;;

166 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 16:31:31 ]
>>165
「圧縮/解凍のやりかた」以外の何を知りたいのか
具体的に書くべきだろうな、そういう時は。
「マニュアルに書かれている内容が理解できないので
噛み砕いて教えて下さい」って言ってるのと同義なんだから。
search.cpan.org/dist/Archive-Zip/lib/Archive/Zip/FAQ.pod
search.cpan.org/dist/Archive-Zip/lib/Archive/Zip.pm

167 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 16:48:45 ]
>>166
すみませんでした。

具体的にやりたいのは、画像ファイルを無圧縮ZIPに固めておき、それを解凍せずにブラウザに表示したいのです。
ローカルファイルを開いたハンドルから表示するのは出来たので、
ZIP内のファイルのハンドルが取れれば、出来そうなのですが・・・

my $zip = Archive::Zip->new('test.zip');
my $fh = $zip->open('hoge.jpg');

みたいに出来たらな・・・と。


168 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 19:22:43 ]
>>167
お望みの物はArchive::Zip::MemberReadかい


169 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 15:14:12 ]
>>168
ありがとうございます。
早速調べて試してみたのですが、Not a GLOB reference のエラーが出ます。perl は初めてなので、なにか勘違いしていると思いますが、それがどこかわかりません。

#!/usr/bin/perl
use Archive::Zip;
use Archive::Zip::MemberRead;

$imgtype = 'jpeg';
#// file @
# open(IMG, "./1.jpg") or die;

#// zip A
$zip = Archive::Zip->new('./1.zip');
$IMG = Archive::Zip::MemberRead->new($zip, "1.jpg");

#// イメージ表示
binmode $IMG;
binmode STDOUT;
print "Content-type: image/$imgtype\n\n";
print while (<$IMG>);
#// 画像クローズ
close($IMG);
#// 終了
exit(0);

@を生かし、Aを殺すとうまくいきますが、逆だと binmode $IMG の箇所でNot a GLOB referenceとなります

170 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 16:28:22 ]
Archive::Zip::MemberReadは中をのぞいてみたけど
ハッシュをblessしただけの普通のオブジェクトだから
ファイルハンドルとしては使えない。あくまで同じような
メソッドが用意してあるだけの普通のオブジェクト。
binmodeとかはムリ。

IO::Stringみたいにグロブにtieしていろいろがんばれば
なんとかなるけどそこまではやってないようです。

171 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 16:55:00 ]
テンポラリに展開して、それを読み込んだほうが良さそうですね。
そういう方向で修正していって見ます。

わざわざ中をのぞいていただき、ありがとうございました。


172 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 21:16:21 ]
ドキュメントぐらい読めよ関数名見りゃだいたい分かるだろ
$zip->contents(FILENAME);

173 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 11:14:51 ]
>>172
テンポラリファイルを使用する形で出来上がっていましたが、$zip->contents(FILENAME)を使用することで
「ファイルの書き込み→読み込み→出力」が、「ファイルの読み込み→出力」にすることが出来ました。
画像の縮小をさせるとレスポンスが遅いのですが、玄箱には重過ぎるのでしょう。

まだフロント(iアプリ)はテスト用でしか試してませんが、なんとか目処がつきました。
ありがとうございます。


174 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 17:09:07 ]
Perlのバイブル本って何?



175 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 17:12:59 ]
プログラミング言語Perl

176 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 17:31:06 ]
正直最初にその1冊買ってそれが最後の本になるなw
あとはCPANとかでいろいろ探しまくる作業が残りの半分。

177 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 17:40:50 ]
>>175
どの本ですか?
アマゾンなどのリンクください。
プログラミング言語Perlマスターコース
プログラミングPerl
という本なら見つかるのですが

178 名前:176 mailto:sage [2010/04/01(木) 17:43:19 ]
ああ、俺が言ってるヤツは プログラミングPerl。
オライリーのらくだ絵の本。Perl開発者が書いたやつ。

179 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 19:04:29 ]
モダンPerl読んだ方がいいと思う

180 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 19:14:03 ]
それバイブルどころか入門書じゃないの?

181 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 19:30:19 ]
プログラミングPerlって説明が古いじゃん

182 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 23:06:19 ]
Effective Perlがいいぞ

183 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 23:17:35 ]
モダンPerlはサスペンダーが大絶賛してたから意地でも読まない

184 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 23:57:33 ]
江川達也さんは何の本でもたいしてちゃんと読まずに大絶賛するだろうが



185 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 00:19:10 ]
モダンPerl読んだけど、情報がとびとびでさっぱり理解できない
初心者にすすめるもんじゃないよありゃ

186 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 02:40:11 ]
プログラミングPerlは思想的に面白い。
Perl6なんて本当は完成させたくないんだよ。
綺麗すぎる言語は退屈だ。

187 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 00:05:27 ]
Linux上で動かすPerlについて質問があります。
ファイルリストに記載されているファイルのみを
別のディレクトリにコピーしたいのですが、
どのようなコードを書けばよいのでしょうか?
ファイルリストを読み込み、$file_listで1文字ずつ表示させる状態にして、
system("cp $file_list $dir_name");とやっているのですが、うまくいきません。

188 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 00:16:52 ]
>>187
print `cp $file_list $dir_name`;
エラーがあるならこれで分かるんじゃないか

189 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 00:31:12 ]
俺の予想では、chompするとうまくいく

190 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 04:09:32 ]
俺が touch ';rm -fr /;' しといてやるぜw >>187

191 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 20:19:04 ]
blessしたオブジェクトをscalar($self)した時に
任意の文字列を返すにはどうすればよいでしょうか?

例えばDateTimeモジュールはDateTime->now()でオブジェクトを取得しますが、
scalar($now)すると現在時間が文字列で返ってくるのですが、
こういうのはどう実装すればよいでしょうか?

192 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 20:38:04 ]
少なくともDateTimeではscalar使った時点で文字列に変わったりはしない
print $now; とか my $datestr = "$now"; で文字列になることを言ってるんなら、overload

193 名前:デフォルトの名無しさん mailto:sage [2010/04/08(木) 01:08:37 ]
>191
use overload ( 略
'""' => '_stringify',


194 名前:デフォルトの名無しさん [2010/04/10(土) 00:38:14 ]
どうしても文字化けしてしまいます。
どなたかヒントでも頂けるとありがたいです。

WWW::Mechanize でCSVをダウンロードします。
その後print や Encode::decode などすると「Wide character ....」 と表示されました。
UTF8フラグが立っているのかと思い、Encode::encode("utf8",$data_str) などして、
ファイルを保存して開いてみると文字化けしてしまいます。
エディタはEmacsでエンコード指定して開き直したりもしてみました。

本当に試行錯誤して、encodeやdecodeのいろんな指定をしてみましたがダメでした。
しかしブラウザからCSVをダウンロードするとエクセルできちんと開きますし、
Emacs で UTF-8 で開くことが出来ます。

正直、分かりません・・・。



195 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 00:43:24 ]
Encode::from_to($data_str, "utf8", "cp932");

196 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 01:25:59 ]
>>194
わかってないなら弾の言う通りに書けよ。

197 名前:194 mailto:sage [2010/04/10(土) 02:00:29 ]
単純にdos窓で表示できない、と言う訳ではありません。Emacsで開いているので。

ブラウザで落とすとUTF8になっているので、ファイルはUTF8なんだと思うんですが。。

Mechanizeのcontent には独特なエンコードルールが有るんでしょうか?
contentのデータをencodeするのがマズイのかな。

198 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 02:23:11 ]
Mech使わないから知らんけど、LWP::UserAgentとかみたいにHTTP::Responseでデータ返してくれるんなら
my $content = $res->decoded_content(charset => 'none'); # $res isa HTTP::Response
で生データ取れるからそれをそのまま保存するなりすればいいかと。

199 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 02:42:18 ]
文字化けとかUTF8と思うとか曖昧なこと言わないで
バイナリエディタで中身見ればいいのに

200 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 02:54:08 ]
>ファイルはUTF8なんだと思うんですが。
思うってなんだそりゃw
自分で見てから判断しれよ

201 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 04:20:49 ]
>>194
とりあえずDevel::Peekなりでdumpしてutf8flagが立ってるかどうかをちゃんと確認した方がいい。
曖昧なまんまの推測だと答えも推測になるからなかなか答えにたどり着かんよ

202 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 05:28:58 ]
>>194
iso-8859-1なんじゃねえの?

203 名前:デフォルトの名無しさん mailto:sage [2010/04/11(日) 00:35:30 ]
Spidering Hacksに載ってたな

204 名前:デフォルトの名無しさん mailto:sage [2010/04/11(日) 00:42:17 ]
Spidering Hacksの内容は今となってはさすがに古過ぎる
スクレイピングのマナーとか心構えとかは参考になるけどな



205 名前:デフォルトの名無しさん [2010/04/14(水) 19:52:51 ]
もう5年以上前になると思いますが、
Perlで書かれたプログラムを実行するとラクダの形で文字列が出力され、
そのプログラム自体もラクダの形に揃えられていたものをみたのですが、
探してみてもなかなかみつかりません。

少ない情報ですが、お分かりの方はいませんでしょうか?

206 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 20:21:48 ]
Acme::EyeDropsじゃねーの

207 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 23:32:19 ]
URLを画面に表示する時に、指定した文字数より長すぎる場合、
ディレクトリ階層を優先してまびくようにするにはどうしたらいいでしょうか?
例:
$url = "www.abc123.net/abcdefg/hijklmn/opqrstu/vwxyz/foo1234.html" ←65文字
$url = omiturl($url, 50);
print $url;
この結果としてこんな感じにしたいです
www.abc123.net/ ... /vwxyz/foo1234.html ←47文字

208 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 00:36:20 ]
>>207

use URI;
sub omiturl {
 my $uri = URI->new(shift);
 my $maxlen = shift;

 my $repl_q = quotemeta(my $repl = "...");
 my $path = $uri->path;
 until (length "$uri" <= $maxlen) {
  $path =~ s,\A/(?:$repl_q/)?[^/]+,/$repl, or last;
  $uri->path($path);
 }
 return "$uri";
}

手っ取り早くURI使ってるから$replに半角スペースとか使うと%20にされちゃうんで、
そのへん気に入らなかったら適当に直してくれ

209 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 04:53:00 ]
>>208
便利につかわさせて頂きます。
ありがとうございました。

210 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 05:59:51 ]
localhost/p2/read.php?host=pc12.2ch.net&bbs=tech&key=1266565626&ls=208-#r208
のようなクエリ文字列 or フラグメントの長いURLを>>208に通すと無限ループするな
見た感じだとマッチしなくなった時点でループを抜けるように書かれてると思うけど、なぜだろう

211 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 06:53:08 ]
マッチもしないし文字数もこれ以上短く出来なくなったら無限ループだな。
例えば文字の長さを10とかやったら絶対無限ループ

212 名前:208 mailto:sage [2010/04/16(金) 10:08:30 ]
oh…やっちまった……テストはちゃんと書きましょうってことだな…
untilを↓に差し替えで無限ループは回避できるはず。>>207がまだ見てることを祈る…
 for (my $i = 0; length "$uri" > $maxlen and $i < 20; $i++) { # ループ20回で強制的に抜ける
  $path =~ s,\A(/(?:$repl_q/)?[^/]+),/$repl, or last;
  last if $path eq $1; # マッチするが置換しても内容が変わらない場合抜ける
  $uri->path($path);
 }

213 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 22:26:22 ]
Cだと
static char hoge[128];
write(fd, hoge, 128);
とすれば128バイト分の0x00が書き込まれると思うのですが
perlだとどのように記述すればいいでしょうか?

214 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 22:45:34 ]
print 0x00 x 128;



215 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 22:46:25 ]
あ、ごめん "\x00" x 128 だ

216 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 00:38:56 ]
>>214
>>215
ありがとうございます、繰り返し演算子という奴を使うんですね。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<157KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef