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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん05/03/10 00:47:16ID:sT66OcmD
Perlのコーディングで困ってる人のスレです。

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

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

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
00524805/03/11 12:11:10ID:???
自分もLWP::UserAgent以外使ったことないんだけどね。
00534805/03/11 12:14:04ID:???
>>51
間違いです
条件が満たされなくなった時点で次の判定式はスルーされます
00541505/03/11 12:28:51ID:BXH5EoKa
これは面白いですね!
他のページの出力内容を自分のページに埋め込むことができるというのはすごい!

LWPを紹介してくださってありがとうございますm(__)m
0055nobodyさん05/03/11 12:45:14ID:???
なんとなく、 Perl や Web プログラミングをおぼえたてのナイーブだったあの頃を思い出させるスレの流れ。
00564105/03/11 12:57:15ID:wWuZgVEw
>>53
ということは、1つ目の条件式をクリアしたあと、
2つ目の条件式をクリアしたときにだけ
代入されて、次のループに移るってことですね?
00574805/03/11 13:17:32ID:???
>>56
正解
複数の式を||でつないだ場合は逆に式が真の時点で判定は終了する。
0058nobodyさん05/03/11 13:42:15ID:???
小数点切り上げって関数がないようですがどうすれば?

$n = 100/49;
if ($nが小数点を含んでいたら){
int $n+1;
}

なんか面倒なのですがこれが普通ですか?

0059nobodyさん05/03/11 13:43:56ID:???
というか小数点を含む数値がどうか調べる関数もないorz
0060nobodyさん05/03/11 13:47:09ID:???
馬鹿な話ですがuseってプログラムの先頭に書いたほうがいいんですか?
使う直前の方がいいですか?

後者だと重複useがでる可能性がありますが、それを良しとするなら見やすいですよね。
意見お願いします。
0061nobodyさん05/03/11 13:58:58ID:???
>>58
>>59
POSIXモジュールのceilとかmodf使えば?
00621505/03/11 14:20:21ID:BXH5EoKa
実装できました。

ところでこのLWPって制作側としてはものすごい便利ですが、これを使うと、
ユーザが直接アクセスしてもいないサイトへユーザの情報が自動的に送られてしまったりしますよね?

例えばとある悪質なアダルトサイトがあったとして、悪質だと気付かずにそこに
月額契約をした場合にその入力内容をそのまま他の数十のアダルトサイトへも
LWPでリクエストが送られて自動的に登録されてしまうような惨事も起きてしまう可能性もありますよね。

当然勝手に登録されたといっても、住所や電話番号からクレジットの暗証番号まで正確なので
下手したら裁判でも負ける気がするのですが・・・・

まあもちろんアダルトサイト管理人がLWPを使わずとも手動で顧客の情報で他のサイトにも
登録するのと同じことですが。

このあたりってみなさん気にしたことありませんか?
00631005/03/11 14:30:12ID:???
返答遅れてすみません。色々試してました。

正規表現を逆にしてみたりPerlメモの文字コードの
正規表現を見ながら自分なりに書いていたつもりだった
んですけど、上手くいきませんでした。

Unicode::Japaneseは315,392 バイトあるということで、
プロジェクトマネージャに却下されました。。。

色々とご教示いただき、誠に有難うございました。
もしも カタカナ->ひらがな変換に成功した際はこちらで
報告させていただきます。
00641505/03/11 15:05:14ID:???
>>63
よくわかんないけど、jcode.plですぐできるんじゃないですか?

jcode::tr(\$str,"ア-ン","あ-ん");
もしも半角カナもというならこれをやる前に
jcode::h2z_euc(\$str);
をやるだけ。

バイト云々ならlength関数とか使いながら一旦適度な長さに分割してそれからくっつける。

そういうルーチンを自分で作ればいいけど何か問題でもあるのかな?
00651505/03/11 15:07:40ID:???
追記
単に分割は危ないので、ちゃんと文字の区切りでやりましょう。

my @strings = $string =~ /[\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE]/og;
これはeucコードでなくてはならないので先にeucに変換して下さい。
00661505/03/11 15:21:57ID:BXH5EoKa
あ、すみません。LWPで1ヵ所質問です。

# リクエストを作成します
my $req = new HTTP::Request POST => 'http://www.perl.com/cgi-bin/BugGlimpse';
$req->content_type('application/x-www-form-urlencoded');
$req->content('match=www&errors=0');

今動作確認したらどうやら
$req->content('match=www&errors=0');
この値は自動的にURIエンコードしてくれてはいないみたいですが、
たとえば
hoge=あいうえお
なんて場合には自分で「あいうえお」だけエンコードしろっていう仕様なのでしょうか?
0067nobodyさん05/03/11 15:29:44ID:???
>>62
https以外で本名、住所書いたことないし。それもある程度有名なところ。
その他のwebで入力した情報は一般に公開したものと思ってるから気にしてないしそういうとこ個人情報は書かない。
4月から個人情報なんたらは始まるけどどうなんでしょうね。
0068nobodyさん05/03/11 15:37:40ID:???
LWPはhttpsでも問題なく使えるがそういう問題ではないのか?
よくわからん。そもそも勝手に登録されたものなんて無効だよ。
気にする必要なし。
00696005/03/11 15:39:38ID:???
お願いします;
0070nobodyさん05/03/11 16:05:15ID:???
Perlって
ー
の文字がエラーになるって聞いた覚えがあるんだけど、EUCで書いてれば無問題?
0071nobodyさん05/03/11 16:09:22ID:???
>>70
sjisでもエスケープすれば無問題
0072nobodyさん05/03/11 16:20:46ID:???
eqとか==の演算子って$_をデフォルトで対象にしてくれないみたいですが、
そういうことをしてくれるモジュールってありませんか?

for(0..4){
print "3回目" if 3 eq;
}

とかできると便利なんですけどね。
0073nobodyさん05/03/11 16:28:02ID:???
あっそ
0074nobodyさん05/03/11 17:02:50ID:???
aa... eq
0075nobodyさん05/03/11 17:25:44ID:???
>>72
4回目だろ、とかいう突っ込みはありかな
0076nobodyさん05/03/11 18:45:46ID:stOV0FtX
こんなのは?
print "3回目" if /^3$/;
0077nobodyさん05/03/11 19:20:11ID:???
横着したがるのもたいがいにせいよと
0078nobodyさん05/03/11 20:08:10ID:???
>>10
$value =~ s/\xa4\xa5/`/g;
$value =~ s/\xa5([\xa1-\xfe])/\xa4$1/g;
$value =~ s/`/\xa4\xa5/g;
0079nobodyさん05/03/11 20:13:17ID:???
>>10
ところで、ひらがな→カタカナの変換はあれで大丈夫?

$value = "ばぅばぅ";
$value = "靴が痛い";

こんなのが、ちとヤバイと思うのだけれど。

>>60
大抵は先頭だね。
でも、配布するモジュールでもなければ好きな所に書いていいと思うよ。
(それから、encodingは、エンコードを始める位置で宣言する必要があるはず。)

>>72
sub at($);

for(1..4){
print "3回目" if at 3;
}

sub at($){ $_ == shift }

# 意味不明な世界へようこそ。
00806005/03/11 21:13:35ID:???
>>79
やっと来た・・・・・

やはり先頭ですよね。でももしも間違って
100行目: use DBI;
.
.
.
700行目: use DBI;

とかしても表面上にはエラーにならないくらいだから、内部的にも何の問題もないんですよね?(encordingなどは別として)
0081nobodyさん05/03/11 21:30:45ID:???
use はコンパイル時に評価されるのでは?
実行時に評価されるのは require で。
0082nobodyさん05/03/11 21:43:35ID:???
>>80
useやrequireは何度呼び出しても問題にはならないことになっている。
モジュールを先頭で呼び出すのは分かりやすくする為にすぎないので、実際に使う分にはどこに書いても構わない。

0083nobodyさん05/03/11 21:57:38ID:???
>>80
大丈夫。

http://www.harukaze.net/~mishima/perl/man/perlfunc.1.html
> use Module
> 指定したモジュールから、現在のパッケージにさまざまな
> 内容をインポートします。 多くは、パッケージのサブル
> ーティン名や、変数名に別名を付けることで、実現されて
> います。 これは、
>
> BEGIN { require Module; import Module LIST; }
>
> というのと、全く同値です。

> require EXPR
...
> ファイルは、同じ名前で 2 回読み込まれることはありま
>せん。

http://www.harukaze.net/~mishima/perl/man/perlvar.1.html
> %INC ハッシュ %INC は、do や require によってインクルード
> された、個々のファイル名をエントリとして持っています。
> key は指定したファイル名で、value は実際に見つかった
> 場所となっています。 require コマンドは、指定された
> ファイル名が既にインクルードされているかを、この配列
> を使って調べます。
0084nobodyさん05/03/11 23:40:01ID:???
モジュールの依存関係がわかりやすいように
useは頭に並べておくのが良いと思います。
0085nobodyさん05/03/11 23:55:38ID:???
自分のサイトでだけ使うサブルーチンライブラリなんかで、
後からどんどんルーチンが増えていく時に、useだけルーチンから出しておくと、
何かと面倒。

なので俺は両方に書いてる。
0086nobodyさん05/03/12 00:26:54ID:???
Perlで会員制ネットショップのCGIを組むとします。

ログインとかログアウトってどうやるんですか?
CGI::Session使えば簡単なセッションはできますが、相手のIDとPASSをセッションファイルに入れればいいのかな?
なんかセキュリティ云々がよくいわれてますが、どちらにしても言うほどのセキリティなんか実装しようがないですよね。

つまりどのレベルまですれば一般レベルなのかということです。

CGI::sessionでセッションIDはクッキーに焼くことで渡し、セッションファイルにIDとパスを。
IDとパスが実在すればログイン状態。

↑これはセキリティ的に足りないでしょうか?
0087nobodyさん05/03/12 00:43:48ID:???
>>86
・IPの一致チェック
・cookieはディスクに保存させない
・可能ならSSLを使用
スクリプト作成者にできることはこれくらいでは。

それと、パスは保存する必要なしかと。
0088nobodyさん05/03/12 02:35:22ID:DLGfeKNq
すいません。四捨五入させなさいとはどう記述すればいいのですか?m(__)m
0089nobodyさん05/03/12 03:03:55ID:???
>>86
セッションで渡り歩かなくても済むような構成にしてしまうのも手。
渡り歩いた履歴はCookieに溜め込んで、最後のページでIDとPassを入力させて完了とか。

>>88
int()をちょいと工夫すればOK。マイナスには気をつけるよろし。
0090nobodyさん05/03/12 07:24:17ID:???
PerlMagickは初心者でOKなんかな。
透過PNGの出力ができないんだけど、仕様ですか?
(透過しない)

透過GIFならできました。
0091nobodyさん05/03/12 08:11:23ID:???
>>88
$num>0 ? int($num+0.5) : int($num-0.5);
0092nobodyさん05/03/12 14:10:22ID:???
>>91
小数点切り上げもそれくらい短くすっきりとできませんか?
0093nobodyさん05/03/12 15:33:01ID:???
$num==int($num) ? $num : int(++$num);
0094nobodyさん05/03/12 15:53:09ID:???
>>93
おお!!
0095nobodyさん05/03/12 17:09:44ID:???
その短いコードが何をやってるかぐらい理解しようや
0096nobodyさん05/03/12 19:44:08ID:???
>>60
ちょっといまさらだけど。
useは、通常の実行文ではなくて、コンパイル中に実行される文だから、普通は先頭。

例えば、
1 + 1;
use hoge;
2 + 2;
とか、書いてしまっても、
絶対にuseから処理される。

if(bool){
  use hoge;
}
とか書いても、ifとか、そんな次元じゃなく、
1番最初にuseが処理される。
だから、普通は先頭に書く。

実行結果は、どこに書いても同じになるかもしれないけど、やっぱ普通は先頭。

スコープに影響するプラグマモジュールなら、話は別で、
適切な場所に書いておくよろし。
(ただし、この場合も実際にはuseは最初に処理されている)。

requireは、実行中に処理される普通の文なので、常に適切な場所が良いと思う。
でも、どこに書いても構わないなら、やっぱ先頭がいいなー。わかりやすいから。
0097nobodyさん05/03/13 08:25:22ID:oiuJgK8i
掲示板つくってるのですがログを読み込んで全部配列に入れて処理してます。
メモリやばいですよね?
0098nobodyさん05/03/13 08:32:34ID:???
>>97
whileで処理した方がいいなぁ
0099nobodyさん05/03/13 08:58:13ID:???
>>97
ログの大きさにもよるが、負荷考えるならまず
書き込んだらhtmlに吐き出すタイプにしような。
0100nobodyさん05/03/13 11:22:33ID:???
>>95
ん?どこが難しいの?
0101nobodyさん05/03/13 11:44:21ID:???
パーミッションの変更はchmodで出来るけれど、
確認する方法はある?
0102nobodyさん05/03/13 12:53:41ID:???
>>101
ファイルテスト演算子
0103nobodyさん05/03/13 13:32:47ID:???
ふつー
chmod … || die
0104nobodyさん05/03/13 15:24:50ID:???
>>87
テンポラリクッキーを使うのですか?でもそれって相手側に協力を求める必要があるんですよね。
IPチェックはちょっと面倒ですが、ログイン時の人間であるかどうかを確認するとセキリティの向上には
なかなかの効果がありそうですね。
SSLは当然です^^

>>89
それだとちょっと利便性が落ちそうですね。
会員価格とかが実現しづらくなります。


あ、IPチェックも無理だ・・・・・
携帯は確か毎回違うIP提出してくるキャリアがあるんだった・・・・

0105nobodyさん05/03/13 15:25:19ID:???
remove関数
0106nobodyさん05/03/13 17:40:44ID:???
>>105
誰に?
0107nobodyさん05/03/13 18:35:32ID:???
コーディングのスレじゃなくて
perl全般の質問スレになったの?
0108nobodyさん05/03/13 18:39:04ID:???
うん。
0109nobodyさん05/03/13 23:36:26ID:???
>>107
っていうか分ける意味がわからんだろ
0110nobodyさん05/03/14 01:38:13ID:???
>>109
でも、WebProgにあるのにActivePerlのインストール方法とか聞く奴がいるからなあ。
0111nobodyさん05/03/14 11:03:24ID:???
>>110
それはスレを分けても変わらないでしょ。
基本的にこの板内のPerl関係の質問は大抵同じ人間が回答してるんだから
個人的には分割することに意義を感じられないな。まあ既に分かれてるものを
無理してくっつける必要があるというわけではないけどさ。
0112nobodyさん05/03/14 13:44:36ID:???
確かに板自体がもうずっと人少な杉だし
回答者はどのスレでも一緒だろうな

そろそろどっかとまた合併すんじゃね?
0113nobodyさん05/03/14 14:07:00ID:???
そもそもマとムとwebprogと分けるに至った経緯が知りたい。
ヲタク板なんて細分化する必要ないのになぁ。
0114nobodyさん05/03/14 14:52:44ID:???
ゲ製も別だし
0115nobodyさん05/03/14 16:09:47ID:???
ユーザ層が違うんだよ。
0116nobodyさん05/03/15 10:01:02ID:3Ik8WJWF
gzip圧縮転送についてですが
tp://tech.bayashi.net/pdmemo/gzip.html
これを/bin/gzipでなくCompress::Zlibでやりたいのですが
open(STDOUT,"| $gzip -1 -c");の部分をどのように処理すればいいか
分かりません。どなたかご教授願います。
0117nobodyさん05/03/15 10:28:44ID:???
ttp://aspn.activestate.com/ASPN/CodeDoc/Compress-Zlib/Zlib.html かな
0118nobodyさん05/03/15 11:26:01ID:???
>>115
ユーザ層ごとに分けてどうするのよ。どうせ同じPerlだろ。
周辺関連に差は出るが、広い意見だったりちょっと関係ない知識までつくのが大手掲示板の利点でしょ?

CGIは作れるがwindowsで使える簡単なソフトは作れないなんていう人はこの板には結構いそう。
なんかもったいない。みんな一緒なら、知らずに目に入って付く知識で十分できるようになるのに。

って個人的な意見ゴメンね,(__),
0119nobodyさん05/03/15 11:53:16ID:???
>>115が言いたいのはマ、ム、ウェブプ、ゲ製で
扱われる言語や話題のユーザー層が違うってことだろ
012011605/03/15 11:56:36ID:3Ik8WJWF
>>117
ご回答ありがとうございます。
教えていただいたwebに私のやりたい処理と似たような処理が紹介されてましたが
ちょっと違う感じです。スクリプト内部にprint文で書かれた内容全部をgzip圧縮させて
転送させたいです。スクリプトを貼り付けると、以下のような感じで処理したいです。
##の部分がうまくいきません。

#!/usr/bin/perl
use Compress::Zlib;

if ($ENV{'HTTP_ACCEPT_ENCODING'} =~ /gzip/) {
 print "Content-type: text/html\n";
 if($ENV{'HTTP_ACCEPT_ENCODING'} =~ /x-gzip/){
  print "Content-encoding: x-gzip\n\n";
 } else {
  print "Content-encoding: gzip\n\n";
 }

## ここで$bufferに<h1>Hello world</h1>以下の出力内容全てを代入したい

 print Compress::Zlib::memGzip($buffer);

} else {
 print "Content-type: text/html\n\n";
}

print "<h1>Hello world</h1>";
print "aaaaaa";
0121nobodyさん05/03/15 12:24:33ID:???
>>120
printした後は標準出力に渡されるのでPerlでは圧縮しようがないのだが。
パイプでつなぎたくなければ圧縮してからprintするしかなかろう
0122nobodyさん05/03/15 12:35:49ID:???
すいません。助けてください。
ID番号の出るスレッドに書き込みしたのですが
どうしてもそのレスを消したい場合に方法はないのでしょうか?
すごく困っています。絶対入れてはならないことをレスしてしまったもので・・
0123nobodyさん05/03/15 12:39:02ID:???
>>122
レスの削除は、削除依頼板。
http://qb5.2ch.net/saku2ch/
0124nobodyさん05/03/15 12:52:16ID:???
>122
どこやねwん
012511605/03/15 13:03:28ID:???
>>121
ご回答ありがとうございます。
tp://www.rfs.jp/sitebuilder/perl/02/08.htmlを参考にして子プロセスを作ることで出力を$bufferに代入することができました。
回答していただいた方々ありがとうございました。
参考までに成功したスクリプトを貼っておきます。(直したほうがいいところは指摘お願いします)

#!/usr/bin/perl
use Compress::Zlib;

if ($ENV{'HTTP_ACCEPT_ENCODING'} =~ /gzip/) {
print "Content-type: text/html\n";
if($ENV{'HTTP_ACCEPT_ENCODING'} =~ /x-gzip/){
print "Content-encoding: x-gzip\n\n";
} else {
print "Content-encoding: gzip\n\n";
}

if( open BUF, "-|" ){
while ($buf = <BUF>) {
$buffer = $buffer.$buf;
}
close(BUF);
print Compress::Zlib::memGzip($buffer);
exit(0);
}
} else {
print "Content-type: text/html\n\n";
}
print "<h1>Hello world</h1>";
print "aaaaa";
0126nobodyさん05/03/15 13:05:48ID:???
>>125
その汚さなんとかしろよ
012712505/03/15 13:06:21ID:???
すいません。全角でインデントするのを忘れてました。
それ以外で直したほうがいい部分は指摘ください。
012812205/03/15 13:31:20ID:???
削除スレ教えていただきありがとうございます。
ですが、とてもじゃないけど、該当する項目がなくって無理でした。
というのが、自分の独り言を赤裸々にタイピングしてる途中に、
間違って「書き込む」のボタンを押してしまったんです。
しかも、人に知られたら恥ずかしいし、どうしようもない内容なんです。
で、IDが1日たっても変わってなかったってのもあって、きっと誰かが
それに気付いて恥をかくか、煽りの的になるなーと思うと、もー気になって
気になってパニックしてます。書き込みは慎重に行うべきですね。
0129nobodyさん05/03/15 15:54:03ID:???
>>127
いや、全角インデントとかの話じゃなくてさ。
まあ好きにしてくれ。
0130nobodyさん05/03/15 15:54:46ID:???
>>128
というか何を血迷ってここに書き込んでるんだ?
Perlとどういう関係があるんだよ。
0131nobodyさん05/03/15 16:10:30ID:???
DBIでMySQLにつないでるんですが、例えばnameフィールドが重複してるデータだけ検索するのって可能ですか?

MySQLだけでは無理だと思うのでPerlでやるしかないと思うのですが、

name,age,mail
太郎,19,[email protected]
次郎,28,[email protected]
....

こういうデータからnameの重複文だけ表示させたいのです。
こういうのって1回ずつやらないといけないのでしょうか?

my $data = select 1番目のデータ取得
my @重複 = select 色々 where name=$data

みたいに。(変な書き方ですみません。)


dataの中から例えばメールアドレスが重複してるのがあるかないか、あるなら
それをすべて表示。
一発で[email protected]という値がいくつ重複してるか、[email protected]がいくつ重複してるかを調べたいのです。
0132nobodyさん05/03/15 16:27:56ID:???
>>131
全データのnameフィールドを取り出してハッシュで数えれば一撃。

0133nobodyさん05/03/15 16:40:21ID:???
>>125-126
そう? 少し気になるとこもあるけど、まだマシな方だと思うなあ。
というわけで >>126 お手本プリーズ
01344805/03/15 16:49:20ID:???
>>131
>MySQLだけでは無理
普通にできますが
SELECT count(*) AS `count`, * FROM `table` GROUP BY `name` HAVING `count` > 1 ORDER BY `count` DESC
013513405/03/15 17:01:28ID:???
確認したらエラーが出たので訂正
SELECT count(*) AS `count`, `name` FROM `table` GROUP BY `name` HAVING `count` > 1 ORDER BY `count` DESC
0136nobodyさん05/03/15 19:02:33ID:???
>>131
対象列がnameからmailに変化してるのにワロタ
0137nobodyさん05/03/15 22:04:08ID:???
ム板の香具師にこのスレが低能集いスレに扱われている件について
0138nobodyさん05/03/15 22:04:56ID:???
>>125
見ただけでもヘッダのつき方が滅茶苦茶だと思う。
問答無用で圧縮されたものを送っているというのも。
013913805/03/15 22:06:55ID:???
おっと、ブラケットを読み間違えてた。ごめん。
0140nobodyさん05/03/15 22:09:23ID:???
>>137
どっちも見てる奴がほとんどじゃないの?
0141nobodyさん05/03/15 22:09:47ID:???
>>138-139
>>137
0142nobodyさん05/03/15 22:17:03ID:???
いや、でも誤読を誘発しやすそうなコーディングではあると思うよ。
014313805/03/15 23:51:35ID:???
腹が立ったので書き直してみた。
圧縮された内容にヘッダが付かないようにしたのと、
forkに失敗したときの対策。

my $pid;
if ($ENV{HTTP_ACCEPT_ENCODING} =~ /((?:x-)?gzip)/){
    my $encoding = $1;
    if ($pid = open(BUF, "-|")){
        local $/;
        my $buffer = <BUF>;
        close(BUF);

        print "Content-encoding: $encoding\n",
            "Content-type: text/html\n\n",
            Compress::Zlib::memGzip($buffer);
            exit;
    }
}
if (not defined $pid){
    print "Content-type: text/html\n\n";
}

print <<"EOF";
<html>
<head><title>test</title></head>
<body><h1>Hello world</h1><p>test-test</p></body>
</html>
EOF
exit;
0144nobodyさん05/03/16 00:23:12ID:???
if ($ENV{HTTP_ACCEPT_ENCODING} =~ m/((?:x-)?gzip)/ and open BUF, '-|'){
    my $encoding = $1;
    local $/ = undef;

    print "Content-Encoding: $encoding\n",
          "Content-Type: text/html\n\n",
          Compress::Zlib::memGzip <BUF>;

    close BUF;
    exit;
}

print "Content-Type: text/html\n\n",
      <<"EOF";
<html>
<head><title>test</title></head>
<body><h1>Hello world</h1><p>test-test</p></body>
</html>
EOF
0145nobodyさん05/03/16 01:23:42ID:???
144 > 143 ?

しかし local $/ = undef; っていいな、使える。 いままで気づかなかったよw

コードはいいけど、HTML中途半端なのは何でかなw
どうせ省略するなら title と p だけでいいのに。
0146nobodyさん05/03/16 06:44:11ID:???
>>144
圧縮する内容物にもヘッダが付きますが、必要ですか?
014712505/03/16 08:48:11ID:???
>>143-144
きれいに修正ありがとうございます。
活用させていただきます。
0148nobodyさん05/03/16 11:21:44ID:uAWX38vA
htmlファイルをopenして、その中のリンクを取り出し、アンカー名 URL、というふうにしたいのですが、
URL中に?があるときだけうまく取り出せません
念のためエスケープしてもうまくいきません
たすけて

348 while ($main=~m/(<a href=\"(.*?)\">(.*?)(?: +?)?(?: +?)?<\/a>)/ig){
349 $matc1=$1;$matc2=$2;$matc3=$3;
350 if ($matc2 eq $matc3){
351 $main=~s/\Q$matc1/$matc2/;
352 }else{
353 $main=~s/$matc1/$matc3 $matc2/;
355 }#if else;
356 }#while;
0149nobodyさん05/03/16 13:37:59ID:???
>>148
いろいろ無駄っぽw

$main =~ s{<a href="(.*?)">\s*(.*?)\s*</a>}{ ($1 eq $2) ? $1 : $1 .' '. $2 }eig;
0150nobodyさん05/03/16 13:40:10ID:???
あ、: $2 .' '. $1 か。
0151nobodyさん05/03/16 14:36:59ID:???
>>150
別にeqまでしなくていいでしょ。それならtitleとか考慮したら?

s{<a\s+.*?href="(.*?)".*?>\s*(.*?)\s*</a>}{$2 $1\n}ig;

■ このスレッドは過去ログ倉庫に格納されています