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

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

■ このスレッドは過去ログ倉庫に格納されています
00019882005/12/08(木) 22:48:27ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
0136nobodyさん2005/12/16(金) 21:43:16ID:Nkz0ct/3
表示するページをランダムに決めて、
それをパラメータとしてURLに含めるといった感じの処理でいいんでしょうか?
0137nobodyさん2005/12/17(土) 00:09:34ID:???
ページのナンバーを配列にでも突っ込んでシャッフルして、
それを順番に出力すりゃいいんじゃね?
参考になるかわからんが、こんなんどうよ

@array=();
for ($count = 0; $count < 7; $count++) {
 push(@array,$count);
}
&shuffle (\@array);

sub shuffle {
 my $array = shift;
 my $i;
 for ($i = @$array; --$i;) {
  my $j = int rand ($i + 1);
  next if $i == $j;
  @$array[$i, $j] = @$array[$j, $i];
 }
}
0138nobodyさん2005/12/17(土) 00:33:28ID:???
>>136
分からないのは
・リンクするページを混ぜる(シャッフルする)部分
・どうやってリンクするのか
のどっち?
0139nobodyさん2005/12/17(土) 11:47:28ID:???
>>138
下です。
0140nobodyさん2005/12/17(土) 18:08:47ID:???
1.テンプレートなどを利用して全てのページを動的に出力する
2.ページ移動用のスクリプトを用意して、ページ移動用のリンクに全部埋め込む
3.SSIを利用して、リンクの部分を別ファイルで用意する

一定時間ごとに混ぜるのなら3.でもいいけど、
訪問者ごとに違う順番を見せるのなら3.は向かない。
2が一番無難。

って答えでいいかしらん。
0141nobodyさん2005/12/17(土) 18:18:13ID:???
>>136の言いたいことがまだわからないのは俺だけだろうか
0142nobodyさん2005/12/17(土) 21:16:26ID:6Cij4iqn
ネット上でIDやパスワードなどの登録画面などで登録後に前のページに
戻ったりすると「有効期限切れ・・・・」という画面がでますが
そういう仕組みってどうすればいいんですか?
perlからすこしそれた質問かもしれませんが教えてもらえませんか?
0143 ◆TWARamEjuA NGNG
Expire:とかExpireとか
0144nobodyさん2005/12/17(土) 21:51:48ID:???
画像をアップロードしたいのですが
アップロードされたファイルの、保存される前のファイル名の取得方法をおしえてください。
おねがいします。
0145nobodyさん2005/12/17(土) 22:07:09ID:???
フォームからmultipart/form-dataでデータ飛ばして
観察してみろと。
0146nobodyさん2005/12/17(土) 23:16:57ID:???
それを聞いてるのでは?・・・
0147nobodyさん2005/12/18(日) 03:17:23ID:3ossMEQR
ページを戻ると
警告 : ページの有効期限切れ
が出ます。
少し調べてみたところ、入力フォームがあるとこうなるらしいですね。
入力フォームを残したまま、エラーを出させないようにすることは出来ないでしょうか?
よろしくお願いします。
0148nobodyさん2005/12/18(日) 05:12:35ID:7vISx30W
>>147
perlとは関係無いこと
外池
0149nobodyさん2005/12/18(日) 05:21:50ID:???
>>147
お前は五スレ前も見えないのか。
0150nobodyさん2005/12/18(日) 15:57:02ID:???
perlで,外部サイトへのリンク切れは
どのようにしてチェックできますか?
よろしくお願いします。
0151nobodyさん2005/12/18(日) 18:11:14ID:???
外部サイトってなんだよ
何がやりたいのか意味不明
01521502005/12/18(日) 18:22:15ID:???
意味不明でごめんなさい。
1万件のリンクをリンク切れかどうかチェックするスクリプトを作りたかったのですが、
何とか自力で作ることができました。

解決です。m(_ _)mぺこり
0153nobodyさん2005/12/18(日) 20:24:45ID:???
3時間かからないで作ったのかヨ。って、別人だろ
0154nobodyさん2005/12/18(日) 20:26:52ID:???
んなの5分もいらないだろ
0155nobodyさん2005/12/18(日) 22:42:45ID:???
>>148-149
無理なのか。期限切れにならないサイトもあったから操作可能なのかと。
サンクス。
0156nobodyさん2005/12/18(日) 23:12:38ID:7vISx30W
えくすぱいあ
以上。
>>155
文も読めないやつはマズは国語から学べよチンカスが
ほかいけや
0157nobodyさん2005/12/19(月) 00:33:37ID:???
素朴な疑問。
multipart/form-dataのときにもexpireヘッダって効いたっけ?
前にテストしたとき効かなかった(というよりはキャッシュのセキュリティで弾かれたっぽい)記憶があるんだけど?
0158nobodyさん2005/12/19(月) 00:53:51ID:???
CGI: Common Gateway Interface part 13
http://pc8.2ch.net/test/read.cgi/php/1126436361/
0159nobodyさん2005/12/19(月) 01:41:23ID:???
プロクシオミトロンが入ってたら無効なんだけどね。信用しすぎはイクナイ
0160nobodyさん2005/12/19(月) 01:42:18ID:???
「情報を再送信しないとページを更新できません」
という警告はブラウザの機能だから、サーバ側では操作できないと思うが。
これとは違うのだろうか。
0161nobodyさん2005/12/19(月) 01:57:53ID:mSKnbNI+
>>159
プロクソミトロン
0162nobodyさん2005/12/19(月) 10:37:15ID:???
基本的な質問で恐れ入ります。
rand関数についての質問ですが

$i = int(rand(100));
$i には、0 〜 99 の乱数がセットされる

と、とあるサイトに説明されていたのですが、この例の場合100が
セットされることはあり得るんでしょうか?
int関数は小数部分を切り捨てて整数化するので100を返す場合は100.000…
以外ないと思うので確率的に考えて自分で実際にプログラム作って試して調べるのは
とてもじゃないですが無理だと思いますので、どなたか教えてください。
0163nobodyさん2005/12/19(月) 10:54:10ID:???
ありません。
perldocにあった気がしたけどURL忘れた
01641622005/12/19(月) 10:59:59ID:???
>>163
有り難うございました!!
乱数を使ってて、ふと気になったもので。
0165nobodyさん2005/12/19(月) 11:08:36ID:???
簡単に調べられるじゃん。

for (1 .. 1000000){
100 <= rand(100) and print "100 Over.\n";
}
0166nobodyさん2005/12/19(月) 11:14:46ID:???
( ゚д゚)ポカーン
0167nobodyさん2005/12/19(月) 11:41:23ID:???
>>165
それじゃ証明できんだろ
というかrand(EXP)で0からEXP未満までの数をかえすと説明されてるし
0168nobodyさん2005/12/19(月) 15:14:31ID:nE/lruN5
質問です。
英語のフォームページを作っています。
htmlの中で
<html lang="en">と
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
として英語用にしています。

フォーム自体はきちんと動くのですが、届いたメールのタイトル(件名)が文字化けします。
「英語ページよりお問い合せ」が「英語ペ?[ジよりお問い??ケ」になります。
英語ペ\ージよりお問い\合せとか英語\ペ\ー\ジよりお問\い\合\せなど試してみたのですが、うまくいきません。
jcode.plはcgiの中に読み込んでいますが、ページの内容が英語しかない場合は日本語を完全には使えないのでしょうか?
0169nobodyさん2005/12/19(月) 15:20:26ID:???
とりあえず
http://www.atmarkit.co.jp/fnetwork/rensai/netpro03/netpro01.html
ここの前編と後編読んでからもう一度来いや
01701682005/12/19(月) 16:02:23ID:???
>>169 ありがとうございます

■日本語はテキストではない?〜テキストの送受信
を読んで、単純に
Content-Type: text/plain; charset="ISO-2022-JP"
を
Content-Type: text/plain; charset="SJIS"
に変えたらいいのかな、って思いましたがうまくいきませんでした。


http://www.atmarkit.co.jp/fnetwork/rensai/netpro04/netpro01.html
の●一般的なヘッダでの利用を読んで
subject:のところに=?ISO-2022-JP?B?と?=を入れて、
その間にタイトル(件名)として使う文章をbase64で変換した文字を入れました
ttp://phpspot.net/php/pgbase64%83G%83%93%83R%81%5B%83h%83c%81%5B%83%8B.html
は何故かうまくいかなかったので
ttp://www.vector.co.jp/soft/win95/util/se139646.html
でbase64に変換しました。

これでできました。ありがとうございました。
0171nobodyさん2005/12/19(月) 17:13:11ID:mSKnbNI+
rand は 0〜99.99... まで
小数点以下がどれくらい続くかは知らない
0172 ◆TWARamEjuA NGNG
え?
0173nobodyさん2005/12/19(月) 19:55:13ID:???
み?
0174nobodyさん2005/12/19(月) 20:12:41ID:???
り?
0175nobodyさん2005/12/19(月) 22:15:36ID:M/zhZkxT
Perl暦数ヶ月の初心者です。
頑張ればPerl/CGIで簡単な掲示板を作れるかも、という程度でしょうか。

現在、HTML::Templateを使ってコーディングしています。
テンプレートファイル内から TMPL_VAR でパラメータを渡す時、

$template->param(
  'PARAM_1' => $var { 'PARAM_1' } ,
  'PARAM_2' => $var { 'PARAM_2' } ,
  'PARAM_3' => $var { 'PARAM_3' } ,
);

というようにやるところを、
出来るだけ動的に行いたいと思っています。

テンプレートファイル内のパラメータ PARAM_XX に対し、
ハッシュ $var { 'PARAM_1' } の値を渡せるようにしたいのですが、
どのようにコーディングすれば良いでしょうか。


自分なりに、環境変数一覧を書き出すプログラムを参考にして

foreach my $key ( keys %var ) {
 $template->param ( $key => $var { $key } ) ;
}

と書いてみたのですが、値が渡された様子はありませんでした。

01761752005/12/19(月) 22:25:36ID:???
失礼。

誤:
ハッシュ $var { 'PARAM_1' } の値を渡せるようにしたいのですが、

正:
ハッシュ $var { 'PARAM_XX' } の値を渡せるようにしたいのですが、


それと、Perlのバージョンは5です。
0177nobodyさん2005/12/19(月) 22:46:36ID:???
それでわたるはずだが。思い違いじゃない?

% perl -e 'use HTML::Template; $t = HTML::Template->new(scalarref => \ "A=<TMPL_VAR NAME=A>\nB=<TMPL_VAR NAME=B>\n"); %h=(A=>"foo", B=>"bar"); foreach $k(keys %h){$t->param($k=>$h{$k});} print $t->output;'
A=foo
B=bar
0178 ◆TWARamEjuA NGNG
$template->param(map +($_, $var{$_}), map sprintf(qq|PARAM_%d|,$_), (0..XX));
(@_@)
0179nobodyさん2005/12/19(月) 23:18:48ID:???
おっかしーなー……



(10分後)


変数名違ぇじゃん… orz


ご迷惑おかけしました。
俺の半日はなんだったんだ。
0180nobodyさん2005/12/19(月) 23:30:59ID:mSKnbNI+
ループでぶん回せばいいだけじゃん
0181nobodyさん2005/12/20(火) 00:11:38ID:???
m9(^Д^) プギャー
0182nobodyさん2005/12/21(水) 09:34:15ID:m1/a3jED
リンク元を 取り出すためにはどうすればいいでしょうか?
0183nobodyさん2005/12/21(水) 09:53:57ID:m1/a3jED
$ENV{'HTTP_REFERER'} を使えばいいってことは分かるんだけど
流れとして


どっかリンク元→ a.html → b.cgi

ってかんじでaのフォームで変数をb.cgiに渡すってかんじなんだけど
b.cgiで$ENV{'HTTP_REFERER'}を使うと、a.htmlがリンク元として
表示されてしまいます。
どっかリンク元の環境変数を得るにはどうすればいいですか?
0184nobodyさん2005/12/21(水) 10:25:10ID:???
>>183
a.htmlをa.cgiにしてそこで取得する
どっかリンク元→ a.cgi → b.cgi

またはa.htmlでJavascript使って渡す
0185nobodyさん2005/12/21(水) 12:44:51ID:m1/a3jED
>>184
javascriptでも出来るんですか!?
0186nobodyさん2005/12/21(水) 14:50:11ID:kTJQiyq+
hogehoge配下の.txtファイルであれば全てpermissionを664にすると言うプログラムを作りたいと思います。

opendir DIR, "hogehoge" || die "cannot open";
@entry = readdir DIR;
foreach(@entry){
 opendir DIR, "$_";
 @entry = readdir DIR;
 if($_ =~ /.txt\z/){
  $changemode = chmod 0664, "$_";
 }
}

と書いたのですが、
hogehogeの中にディレクトリがあった場合は。そのディレクトリの配下にあるディレクトリやファイルを更新しません。
hogehoge配下にあるディレクトリやファイル全てを読み込むようなプログラムを作るのにはどのようにしたらよいでしょうか?
0187nobodyさん2005/12/21(水) 15:24:50ID:???
>>186
再帰
0188nobodyさん2005/12/21(水) 16:13:34ID:???
>>186
楽してモジュール使えば?File::Findとか。
0189nobodyさん2005/12/21(水) 18:40:34ID:???
>>187-188
ありが�d
結局Find使わずにやりました。
てか、作ってからFindに気がついたorz
0190nobodyさん2005/12/21(水) 18:47:58ID:???
質問させてください。
語尾が.htmlで終わるものを「処理」を行っているのですが、
.htmlだけでなく、.htm .jpg .gif も「処理」対象にしたい場合は
どのような正規表現を使ったらよいですか?

if($file =~ /.html\z/){
 処理
}
0191nobodyさん2005/12/21(水) 18:58:47ID:???
if ($file =~ /\.(html?|jpg|gif)) {
foo();
}
0192nobodyさん2005/12/21(水) 19:31:01ID:HAcTfIEX
ある本にperl5.8以降では、\p{Han}+ で漢字に一致すると
書いてるので、プログラムに
if($abc=~/\p{Han}/){ 
を記述しているのですが漢字に一致しません。
$abcには漢字が含まれているのですが・・・
一致させるには、ほかに記述すべきことがあるんでしょうか?
0193nobodyさん2005/12/21(水) 20:03:06ID:???
>>191
ありがとう!
0194nobodyさん2005/12/21(水) 20:59:20ID:???
>191
つ/
0195nobodyさん2005/12/21(水) 21:04:57ID:???
>>192
decodeしてる? $abcがEUCのままなんて事は無いよな?
0196nobodyさん2005/12/21(水) 21:37:38ID:ib12VQrv
JavaScript の replace() はリファラそのままスルーしたとおもった
0197nobodyさん2005/12/21(水) 21:41:14ID:???
>>191
つ$
01981922005/12/21(水) 21:45:01ID:HAcTfIEX
>>195
何もしてないのでeucそのまんまです。
「use encoding 'euc-jp';のように、
スクリプトに使っている文字コードを指定することで
\p{Han}+でEUCに正しく一致する」とだけ本には書いてあるので、
プログラムにuse encoding 'euc-jp'の一行を加えましたが、
一致しませんでした。
多分ものすごく基本的なことが理解できてないのだと思います。
もしかしてeucをUnicodeに変換しないとダメということなんでしょうか?
もしそうならその仕方を教えてもらえないでしょうか?
0199nobodyさん2005/12/21(水) 22:37:39ID:???
>>192
初めて知った機能だよ。

use encoding qw(euc-jp);
my $str = "漢字";
$str =~ /\p{Han}/ and print "true";

一応こんなでも通るけど。
0200nobodyさん2005/12/21(水) 23:02:05ID:???
>>198
shift-jisで書いちゃってるとか?
02011922005/12/22(木) 00:17:58ID:l+S0SPkv
というか
use encoding 'euc-jp'のところでエラーが発生してます
error.log見てわかりました。
Wide character in print at ....ってなってるんですが・・・・
なんでなんかな。perlは5.87なのにapche2.0やIE6では駄目とか?
0202nobodyさん2005/12/22(木) 00:23:22ID:???
>>201
>>199のコードでも通らないの?
0203nobodyさん2005/12/22(木) 07:24:22ID:???
Perl 5.8.x Unicode関連
ttp://www.pure.ne.jp/~learner/program/Perl_unicode.html
0204nobodyさん2005/12/22(木) 10:49:59ID:iSEjIkIt
ファイル郡から拡張子だけを抜き出すにはどのようにしたらよいですか?

例えば
start.exe
readme.txt
stop.exe
index.html

と並んでいたら、
.exe
.txt
.exe
.html
のように抜き出したいのですが
0205nobodyさん2005/12/22(木) 11:41:44ID:???
@filenames = ("hoge.txt", "foo.bar.avi", "baz.jpg");

foreach $filename (@filenames) {
push @extensions, (split(/\./, $filename))[-1];
}

foreach $extension (@extensions) {
print $extension, "\n";
}
0206nobodyさん2005/12/22(木) 12:12:50ID:???
>>204
print join "\n", map /(\.[^.]+)\z/, qw(start.exe readme.txt stop.exe index.html);
02072042005/12/22(木) 13:00:30ID:???
>>205-206
ありがとうございます!
02082042005/12/22(木) 13:05:37ID:iSEjIkIt
204-205を参考に
拡張子が重複する(フォルダは無視)場合は表示しないようにするプログラムを作ってたんだけど、
うまくいきません

例えば
start.exe
hogehoge/
readme.txt
stop.exe
index.html
readme.html

と並んでいたら、
.exe
.txt
.html
のように抜き出したいのですけど、、

センスないのかなorz・・・
0209nobodyさん2005/12/22(木) 13:11:55ID:???
>208
日記はチラシの裏にでも書いてろ
0210nobodyさん2005/12/22(木) 13:15:55ID:???
このスレって実績ある?
0211nobodyさん2005/12/22(木) 13:16:55ID:???
あるよ。
0212nobodyさん2005/12/22(木) 13:37:43ID:???
>>208
Perlをなめてんのか?
連想配列にでも突っ込めよ
02132042005/12/22(木) 14:43:03ID:iSEjIkIt
出来ました
if(-f $file){
push @extensions, (split(/\./, $file))[-1];
$fext = (split(/\./, $file))[-1];
}

foreach $extension (@extensions) {
$ext{$extension} = $ext{$extension} +1;
}
($key,$value) = each %ext;
while(($key,$value) = each(%ext)){
print $key, " - ", $value, "\n";
}

>>212のアドバイスがききました
ありがとうございました
0214nobodyさん2005/12/22(木) 16:51:29ID:9N6o95FW
CGI::Application を使ったモジュール内でエラーが起こった時に、
出力を CGI::Carp qw(fatalsToBrowser) のようにするには
どうすればよいんでせう?

0215nobodyさん2005/12/22(木) 16:57:57ID:???
こういうのは?つCGI::Application::Plugin::DebugScreen
02162142005/12/22(木) 17:14:18ID:???
>>215
早速ありがとう!
dependecies にひっかかってなかなかインストールできなかったけど
無理やり動かせた。
開発効率かなりあがりそうだ。

でも、この画面ユーザには見せたくないね。
やっぱエラー処理はちゃんと書かないとダメそうだ。
0217nobodyさん2005/12/23(金) 10:26:25ID:???
>>214
CGI::Applicationのpod見れ
0218nobodyさん2005/12/23(金) 16:23:03ID:???
読んだんなら引用すればいいのに(*´・д・)(・д・`*)ネー
0219nobodyさん2005/12/23(金) 17:31:00ID:???
m9(^Д^) ・・・
0220nobodyさん2005/12/24(土) 19:39:16ID:???
( ^ω^)・・・
0221nobodyさん2005/12/24(土) 23:29:23ID:???
encodingの話ですが、
use encodings "cp932";
を指定しているとき、 URLエンコードされたものが、正常にデコード
できません。

#!/usr/bin/perl

use strict;
use encoding "cp932"; #ここをコメントすれば上手くいく
binmode STDERR, ":encoding(cp932)";

print "Content-Type: text/html; charset=Shift_JIS\r\n\r\n";
my $value;
$value = '%95%5C%8E%A6'; #表示
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
print "しふとじす\n";
print $value;

肝心の$valueが、ちゃんと"表示"に戻りません。
use encodingsの指定をやめると正常に動きます。

原因は何となくわかる (内部はutf-8で処理しているから?)
のですが、対処方法がわかりません。

ここ嫁 でも結構ですので、教えていただけませんか?
0222nobodyさん2005/12/24(土) 23:34:37ID:???
>>221
encoding、PerlIO::encoding、perlunicode を見ろ。
02232212005/12/24(土) 23:34:41ID:???
書き忘れました。
やりたいことは、ソースコードをShift_Jis(cp932)で統一したいのと、
実際に、CGI.pmを使った場合でも、GET、POSTされた Shift_Jisのデータ、
正確には、URLエンコードされたもの、が正常に取得できないので、
これをどうにかしたい、ということです。
0224nobodyさん2005/12/24(土) 23:35:46ID:???
>>221
これだけだと不親切だな。>>8 にある Unicode 関連のところも読め。
0225nobodyさん2005/12/25(日) 10:06:00ID:MhkrUB/B
環境変数で(環境変数でなくてもいいけど)httpであるのか、httpsであるのか見分ける関数ってありますか?
0226nobodyさん2005/12/25(日) 10:50:26ID:sTNGkhi5
https で接続されたときには環境変数 HTTPS に値がセットされると思った
02272212005/12/25(日) 12:10:36ID:???
>>222,224
ありがとうございます。podの方はまだ少ししか読んでませんが、
>>8 の方は読んでみました。
というか、以前から読んでいましたが、理解できていなかった...

#!/usr/bin/perl
use strict;
use Encode;
use encoding "cp932";
binmode STDERR, ":encoding(cp932)";

my $wc = '%95%5C%8E%A6'; #表示
#ただのアスキーコードだけど、utf8フラグがたつ

my $nwc = Encode::encode('cp932',$wc);
#1Byte単位でpackするために、utf8フラグを落とす

$nwc =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
#utf8フラグの立っていない$nwcに対してpackする。1Byte単位で扱える
#$nwcには、cp932の生バイナリが入る

$wc = Encode::decode('cp932', $nwc);
#$nwcのままでは表示できないので、再びutf8フラグを付ける。

print $wc;
#$wcはutf8フラグが立っているので、STDOUT出力時に
#Encode::encode('cp932',$wc)が内部的には動いている


こんな理解で大体OKでしょうか?
だけど、ずいぶんと回りくどいことしていると思います。
0228nobodyさん2005/12/25(日) 17:27:10ID:???
> だけど、ずいぶんと回りくどいことしていると思います。
よく分かってるじゃないか。

encoding は一見お手軽に見えるけど、使い勝手悪いよ。
日本語は全て外部ファイルに追い出すのが遥かに楽。
02292212005/12/25(日) 18:24:14ID:???
>>228
実はencodingをはじめて知ったとき、『これは使える』と思ったのですが、
URLデコードのところで躓いて、導入をあきらめていました。
そのときは、ソースに日本語べた書きでしたが、やっぱり外部ファイルに分離
するのがいいですね。

encodingを使えば、=~(マッチ演算)などで、半角カナなど(何も考えず)上手く処理できる?
print "本能"; などが文法エラーにならないなど、メリットはありますが...
逆に使えなくなるモジュール等を考えると、デメリット(副作用)の方が多いような。

あと、何かとデバックのために Data::Dumperを使って表示するのですが、
Dumperを使って日本語(の入った変数)を表示した場合、Perl内部コードがそのまま
表示されるので、不便といえば不便ですな。
0230nobodyさん2005/12/25(日) 18:25:21ID:???
例えば$commentに
てすとhttp://hoge.hoge/index.htmlてすと
が入っていたとします。
そこで$resultに上記のURLを変換(置換)して
てすと<A HREF="http://hoge.hoge/index.html" TARGET="_blank">http://hoge.hoge/index.html<;/A>てすと
としたいのですがどうしたらよいのでしょうか?
ググったら正規表現とか出てきたのですが、良く分かりませんでした。

自分でやってみたこと
$result = $comment =~ s/(http:\/\/[^ \"\r\n\<]+)/\<a href=\"$1\" target=\_blank\>$1\<\/a\>/g;
print <<END;
$result
END

これをやったら$resultには何も入りませんでした・・・。
0231nobodyさん2005/12/25(日) 19:29:51ID:???
>>229
必要な所にno encoding入れれば、それほど面倒でもなくなるよ。
それも結構、落とし穴があったりするけど。

>>230
(my $result = $comment) =~ s/ (以下略
それと正規表現も修正。
02322312005/12/25(日) 20:09:43ID:???
あっと、>>229宛てのは勘違いしてました。
スマソ。
02332302005/12/26(月) 00:25:11ID:???
>>231さんありがとうございました。
(my $result = $comment)
にしたら無事できました。
あとは正規表現を修正しようかと思って
ttp://www.din.or.jp/%7Eohzaki/perl.htm#httpURL
こちらを参考に
s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+
この正規表現を使わせて頂いたのですが
今度はURLのみ表示されません・・・。
どうしたらよいでしょうか?
0234nobodyさん2005/12/26(月) 01:03:13ID:???
HTML::Templateを使っています。

TMPL_VAR で、改行コードを含んだ文字列を置換するとき
改行コードを<br>や<br/>に変換する便利な方法は無いのでしょうか。
要求される仕様上、<pre>やスタイルシートなど、<br>以外で改行させる方法は不可とします。

現状:
改行コードが自動的に置換されないので、ブラウザ上では改行されて見えない

やってみた方法:
(1) 自前で改行コードを<br>に変換、HTML::Templateのサニタイジング機能を使う
  → <br>というタグが見えてしまう
(2) 自前で改行コードを<br>に変換、HTML::Templateのサニタイジング機能を使わない
  → 正常に改行されるが、セキュリティ上かなりやばい
(3) 自前でサニタイジング、HTML::Templateのサニタイジング機能を使わない
  → とりあえず問題なく動くが面倒&重い。他の方法はないものか?

Perlのバージョンは5。
HTML::Templateのバージョンは不明。(申し訳ない、比較的新しいとは聞いた
02352302005/12/26(月) 01:19:00ID:???
試行錯誤した結果、正規表現を
(s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$%#]+)
にしたら上手くいきました。
変更点は
(1) ()で挟んだ
(2) 後ろの方の$と%の間の,を無くした
です。
何でこうなるのかまだ理解してないので自信ないのですが
これであってますよね?
0236nobodyさん2005/12/26(月) 02:03:15ID:???
>>234
出力する文字列を配列にしてTMPL_LOOPで回すのは無し?
サニタイズぐらい自分でやれよって気はする。

>>235
括弧で挟むのは、置換するところで$1として使ってるから。
カンマは有っても動きそうだけど。
■ このスレッドは過去ログ倉庫に格納されています