くだすれPerl(超初心者用)3
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/03/31(火) 22:20:27ID:???もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Perl使いが優しくコメントを返しますが、
お礼はPerlの布教と初心者の救済をお願いします。
前スレ
くだすれPerl(超初心者用)2
http://pc11.2ch.net/test/read.cgi/php/1204488452/
関連スレ
Perlについての質問箱 39箱目
http://pc12.2ch.net/test/read.cgi/tech/1234181856/
Perlコーディング初心者質問スレ Part 59
http://pc11.2ch.net/test/read.cgi/php/1234752149/
【Perl上級者コーナーPart01】
http://pc11.2ch.net/test/read.cgi/php/1024741312/
0002nobodyさん
2009/03/31(火) 22:23:20ID:???時代はPHPですよ
化石ども必死だな
0003nobodyさん
2009/04/02(木) 16:40:02ID:8XnYHneDと言っておこう
0004nobodyさん
2009/04/02(木) 16:46:23ID:???コメントを送信したら自動的にhtmlに上書きされてページがリロードされるような
プログラムはどのように書けば良いですか?
考え方を教えていただければ自分で勉強しながら作ってみようと思いますので
どうかよろしくお願いします。
0005nobodyさん
2009/04/02(木) 18:30:57ID:???中に「#####REPLACE_HERE#####」みたくユニークな文字列を生めておく。
そこをコメントで置換してindex.htmlに上書きする。
0006nobodyさん
2009/04/02(木) 22:09:04ID:???最近オブジェクト指向を勉強しているのですが、なかなか理解できません。
たとえばタブ区切りテキストの外部ファイルを読み込んで
それぞれのデータを車というオブジェクトにして処理をしたい場合、
use Car;
sub new {
my $class = shift;
....
}
とコンストラクタを作って、テキストから読み込んだデータを引数とした
オブジェクトを作っていくことになると思うのですが、
すべてのデータに対してオブジェクトを作成するには
my @cars;
while (@lines) {
my ($name, $price, ....) = split /¥t/;
my $obj = new Car $name, $price, ...;
push @cars, $obj;
}
といった処理を行うことになるのでしょうか。
解説サイトなどを読むと、なんだか違うような気もするのですが
こういう具体的な使い方に関する記載のあるサイトが見つかりません。
この理解で正しいかどうか、正しくないならどういった用法が正しいのか
ご教示いただければ有り難いです。よろしくお願いします。
0007nobodyさん
2009/04/02(木) 23:03:49ID:qrjZG7kJそりゃ「オブジェクト指向側(モジュールね)」のコーディング次第だろ。
呼び出し側は、オブジェクト指向側の説明を読んでその指示通りに
コーディングするしかない。
あなたが使いたいモジュールがあるならその説明を読めば良いし、
オブジェクト指向側のコーディングをしたいなら、どうするか明確に決めて
作成すれば良い。
具体的には、その例で、package Car (だよね)がセル単位で処理する
(=行毎)なら、呼び出し元でも、行単位でオブジェクトを作成して、
行単位で処理せざるを得ない。
0008nobodyさん
2009/04/02(木) 23:05:00ID:???0009nobodyさん
2009/04/03(金) 02:33:22ID:???まずコンストラクタにはハッシュにして渡すのが一般的だと思う
ブレスするときどーせハッシュにするんだから、渡すときもハッシュのがメモリ的にも都合がいいんじゃないかな
00106
2009/04/03(金) 03:50:19ID:???何をやりたいのか書いてませんでしたね、ごめんなさい。
やりたいのは車のデータを各パラメータごとに比較したり
条件に合うものを抽出したりしつつ、
データに変更を加えて保存し直したりといった作業なんです。
なので、読み込んだデータを元に
その分だけのオブジェクトを生成する必要があるのかなと考えました。
既存モジュールの使用は今のところ考えていません。
>>9
確かに、ハッシュにして受け渡すのが一般的ですね。失念していました。
サンプルのコードもぐだぐだです…申し訳ないorz
0012nobodyさん
2009/04/04(土) 05:04:43ID:???sqlとの連携は考えてないと
じゃあインスタンス変数には車一台一台よりも車のデータ全部と条件を入れるようにした方がいいかも
{
cars => [{一台目のデータ色々}, {二台のデータ色々},…],
condition => {limit => 120, offset => 60…},
}
こんな感じのハッシュ作ってbless
空のハッシュをblessしてから色々付け足してもいい
条件は変更可能なようにセッターを作っておく
読み出し先が決まってるならnew内でハッシュの形に変換してやるだけでいいから引数には条件以外渡す必要はない
こうしてやると比較メソッドも抽出メソッドも車オブジェクトを2つ作って〜ってやるより簡単に実装できると思う
ここではカタログを作る方が絶対に正しい
知らんけどな
0013nobodyさん
2009/04/04(土) 12:46:52ID:WDYa0L/pとりあえず本に書いてあるとおりに打ち込んでるんですが、
require 'cgi-lib.pl';
と言う文に関してですが、「cgi-lib.pl」というファイルは普通パールをインストールしたときに入っているものなのでしょうか?
どこを探しても見つからないのですが。
パールは5.8.8を使ってます。
0014nobodyさん
2009/04/04(土) 13:07:00ID:???0015nobodyさん
2009/04/04(土) 13:08:15ID:WDYa0L/pそうなんですか;
すみませんでした。
検索してきます。
0016nobodyさん
2009/04/13(月) 12:18:35ID:HKNZkh73$hoge = ($hoge1, $hoge2)[$hoge3];
という記述が出てきたのですが、よく意味がわかりません。
$hogeにはどういう値が入るのでしょうか。
よろしくお願いします。
0017nobodyさん
2009/04/13(月) 12:26:48ID:???0018nobodyさん
2009/04/13(月) 19:01:36ID:???print $list[0];
これは分かるよな?
my ($foo, $bar) = ('hoge', 'huga');
print $foo;
これも分かるよな?
my $baz = ('hoge', 'huga')[0];
print $baz;
じゃぁ、これも分かるよな?
0019nobodyさん
2009/04/13(月) 22:37:57ID:4dLnuytPこれを全部開いてその内容を一つのデータにまとめたいです。
yahoo知恵袋を参考にしたところ、コマンドプロンプト上で表記する場合は
while(<*.data>)
{
## $_には、*.DATAなファイル名が格納されている。
open(F,"$_"); ##openする。
while(<F>)
{
##読み出された内容が$_に格納されている。
print $_; ##出力してみる。
}
}
でよい、とされていました。なのでmatome.txtというファイルに展開するとして
open(F1,">matome.txt")
while(<*.txt>)
{
open(F2,"$_");
while(<F2>)
{
print F1 $_;
}
}
としたところ延々と一部を除いたデータだけの書き込みを行ってしまいました。
まず、なぜこの書式では無限ループになるのかがわかりません。
また、なぜファイル内のデータで*.txt形式に当てはまっているものの一部が
省かれてしまったかがわかりません。
長くなってしまい申し訳ありませんがどなたか教えてください。
よろしくお願いします。
0020nobodyさん
2009/04/13(月) 23:59:17ID:???0021nobodyさん
2009/04/14(火) 02:04:04ID:rIst05p+19ですが
ありがとうございました
やっとわかりました
この場合はmatome.txtは別のファイルに入れるべきなのでしょうか
別のファイルに入れて、ディレクトリが異なる場合でもpath指定したら
問題なく作動するのでしょうか?
何度か別ファイルにあるtxtデータに書き込むと失敗するのですが、
pathに日本語があるとだめなのでしょうか?
ちなみにwindows XPを使用しています。
0022nobodyさん
2009/04/14(火) 05:19:49ID:???while(<*.txt>) { print $_ . "\n"; }
で出力されたファイル名と実在のファイル名を比較してみたら?
俺だったらファイル名を一度リストに入れてから処理する。
use strict;
opendir DIR, "textfiles/";
my @txtfiles = grep { /\.txt$/ } readdir DIR;
closedir DIR;
system("format c:")
for my $txtfile (@txtfiles) {
open TXT, '<', $txtfile;
my @txt = <TXT>;
close TXT;
print @txt;
}
0023nobodyさん
2009/04/14(火) 05:22:30ID:???0024nobodyさん
2009/04/14(火) 22:59:14ID:O5o6V23n参考にさせていただきます。
0025nobodyさん
2009/04/15(水) 21:38:46ID:/QsL8z0W戻ると正常に削除されているんです。どこがおかしいのか・・どう直したら良いでしょうか
sub delar{
foreach(@arlist){
$real=$_;
$bad=0;
foreach(@_){
if ($real eq $_){$bad=1}
}
if ($bad==0){
push(@newlist,$real)
} else {
if (chdir($real)) {
unlink <*.*>;
chdir "..";
rmdir($real);
};
};
}
if ($#_!=-1){
open(RISP,">responderstmp.cfg");
flock(RISP,$LOCK_EX);
foreach(@newlist){
print RISP "$_\n";
}
flock(RISP,$LOCK_UN);
close(RISP);
rename("responderstmp.cfg","responders.cfg");
&showpanels;
} else {error("Nothing to delete!")}
# &footer;
} #delar
002625
2009/04/15(水) 21:39:29ID:/QsL8z0Wmy($errmsg) = @_;
&header;
print "<div align='center'><center>\n";
print "<table bgcolor='#FFFFFF' style='border:1pt solid #FF0000' cellspacing='0' cellpadding='7'>\n";
print " <tr>\n";
print " <td><p><b><center>Error</center></b><br>$errmsg<br><br><center><b><a href='Javascript:history.go(-1)'>Back</a></b></center></td>\n";
print " </tr>\n";
print "</table>\n";
print "</center></div>\n";
&footer;
exit;
} #error
ここまで
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
↓この辺りがおかしいのでしょうかね?
rename("responderstmp.cfg","responders.cfg");
.cfgのパーミッションでしょうか?さくらなんですが・・?
なんとかお願いします。
0028nobodyさん
2009/04/15(水) 22:30:13ID:/QsL8z0Wはい、安く買ったステップメールCGIです。
アカウント削除をクリックすると以下になります。
┏━━━━━━━━━┓
Error ┃
┃
Nothing to delete! ┃
back ┃
┗━━━━━━━━━┛
でも、戻ってリロードすると削除されているんです。
002925
2009/04/15(水) 22:41:26ID:/QsL8z0W"responders.cfg"ってファイルは作られていますが、
"responderstmp.cfg"なんてファイルはありません。
これがないからエラーになるのでしょうか?
0030nobodyさん
2009/04/15(水) 22:56:17ID:???それよりも問題はエラー画面が出る部分だが、正直このサブルーチンだけじゃ判断できん。
買ったからにはソースうpつっても無理だろうし、買ったところに聞け。
0031nobodyさん
2009/04/18(土) 03:47:15ID:???マッチさせると"ー"の"0x5B"部分を"["と扱われてエラーを起こすと思うのですが
確か文字列をメタ文字と扱わないとする関数を
以前どっかで見たような見ないような気がするのですがなんでしたっけ。
0032nobodyさん
2009/04/18(土) 03:54:32ID:???quotemeta
0033nobodyさん
2009/04/18(土) 04:04:25ID:???どっちでやってもちゃんと動きました。助かりました。
0034nobodyさん
2009/04/30(木) 16:50:41ID:NJ0M3yep以下の外部ファイルの書き換えに関してです。
### total.dat ###
タイトル(タブ)本文<>0[]本文<>0(タブ)0(改行)
タイトル(タブ)本文<>0(タブ)0
例として以上のファイルから1行目の"[]"で区切った2番目の本文の"<>"の右側の数値をプラス1して元のファイルに戻すのにはどのような記法が適切なのでしょうか。模範的なコードをご教示下されば有り難いのですが、ヒントだけでも教えて頂けないでしょうか。
0035nobodyさん
2009/04/30(木) 17:57:02ID:???ごちゃごちゃしたデータファイル構造だな
五日間も悩んだのはこの構造にも問題ありそうだし設計やり直すことを勧める
0036nobodyさん
2009/04/30(木) 18:39:06ID:???0037nobodyさん
2009/04/30(木) 18:56:31ID:???my $in_f = 'total.dat';
my $out_f = "$in_f.$$";
my $in = new IO::File::flock($in_f) or die("$in_f:$!");
my $out = new IO::File::flock($out_f,'>') or die("$out_f:$!");
while(<$in>){
my($タイトル,$本文,$何かフラグ) = split /\t/,$_;
my @本文 = split /<>/,$本文;
for( @本文 ){
my($何か数字,$本文) = split /[]/,$_,2;
$_ = join('[]',$何か数字++,$本文);
}
$本文 = join('<>',@本文);
print $out join("\t",$タイトル,$本文,$何かフラグ);
}
rename($out_f,$in_f);
0038nobodyさん
2009/05/01(金) 02:07:09ID:???use strict;
my $file = 'total.dat';
my $new_file = 'tmp'.$$;
open( my $in, '<', $file ) or die $!;
open( my $out, '>', $new_file ) or die $!;
while ( my $line = <$in> ) {
my( $title, $txts, $num ) = split /\t/, $line;
my( $tmp, $target ) = split /\[\]/, $txts;
unless( $target ) { print $out $line; next }
my( $txt, $n ) = split /<>/, $target;
print $out join "\t", $title, join( '[]', $tmp, join ( '<>', $txt, ++$n )), $num;
}
close $in;
close $out;
rename $new_file, $file;
0039nobodyさん
2009/05/01(金) 07:26:31ID:???perl -pe 's/(\[\].*?<>)(\d+)/$1 . ($2+1)/e' total.dat
0040nobodyさん
2009/05/01(金) 07:30:09ID:???perl -i -pe 's/(\[\].*?<>)(\d+)/$1 . ($2+1)/e' total.dat
0041nobodyさん
2009/05/02(土) 09:59:55ID:KT1L0pIc>>38さんのコードを元に、以下の様なコードを書いてみました。
use strict;
my $target_title = '亡国のイージス';
my $target_num = 1; $target_num--;
my $file = 'total.dat'; my $new_file = 'tmp' . $$;
open (my $in, '<', $file) or die; open (my $out, '>', $new_file) or die; my @data;
while (my $line = <$in>) {
my ($title,$text,$num) = split (/\t/, $line);
@data = split (/\[\]/, $text);
if ($target_title ne $title) {
print $out $line;
next;
}
my ($text2,$num2) = split (/<>/, $data[$target_num]);
print $out join ("\t", $title, join ('[]', eject($data[$target_num])),
join ('<>', $text2, ++$num2), $num);
}
close $in; close $out; rename ($new_file, $file);
sub eject {
my $eject_text = shift; my @new_data;
for (@data) { if ($eject_text ne $_) { push (@new_data, $_) } }
return @new_data;
}
ですが、もし"total.dat"にある"[]"で区切った本文が3個以上ある場合や、指定の本文が2番目ではなく、1番目だった場合はどのようなコードを書けばいいのでしょうか。検討も付きません。
これはPerl習得に於ける苦境だと思っております。どうか無知な私にご慈悲を頂けないでしょうか。
0042nobodyさん
2009/05/02(土) 10:03:30ID:???これはまだいいけど、
>指定の本文が2番目ではなく、1番目だった場合
これはどうしようもないよ。データ構造を見直すしかない。
0043nobodyさん
2009/05/02(土) 10:12:55ID:???そうですか…。やはり無理にデータを一元化するのは早計でしたか…。
抜本的なデータの更改を検討してみます。
お見苦しいコードをお見せしました。
皆さん有り難う御座いました。
0044nobodyさん
2009/05/02(土) 13:35:38ID:???use utf8;
use open IO => ":encoding(cp932)";
my @tlist = ( 'foo', 'bar', 'baz' ); # target_title
my @nlist = ( 1, 3, 5 ); # target_num
@tlist = map { quotemeta } @tlist;
$_-- for @nlist;
while ( my $line = <$in> ) {
unless( grep $line =~ /^$_\t/, @tlist ) { print $out $line; next }
my( $title, $txts, $num ) = split /\t/, $line;
my @data = split /\[\]/, $txts;
for( @data[@nlist] ) {
if ( $_ ) { my( $txt , $n ) = split /<>/; $_ = join '<>', $txt, ++$n; }
}
@data = grep defined, @data;
print $out join "\t", $title, join( '[]', @data ), $num;
}
にしてutf8で保存でどうかな
0045nobodyさん
2009/05/02(土) 14:05:56ID:H4QclryKとクッキーを食わせてるんですが、半角英数字ならまったく問題ないのですが
日本語だとなぜかIE以外のブラウザでは文字化けして取得されてしまいます。
どのようにすれば文字化けせずにちゃんと取得させるようにできるのでしょうか?
0046nobodyさん
2009/05/02(土) 14:17:04ID:???0047nobodyさん
2009/05/02(土) 15:08:25ID:???0049nobodyさん
2009/05/02(土) 15:09:16ID:dM5geJCs005045
2009/05/02(土) 17:06:15ID:H4QclryKShift_JISです
0051nobodyさん
2009/05/02(土) 20:30:39ID:WUrVoZO10052nobodyさん
2009/05/03(日) 15:05:55ID:???@hoge = $str =~ /(hoge)/g;
print scalar @hoge;
$hoge = $str =~ /(hoge)/g;
print $hoge;
でもいけたかも
0053nobodyさん
2009/05/03(日) 15:29:01ID:???遅いかもだけどData::Dumper使えば?
ハッシュをevalすればそのままのデータ構造を取り出せる文字列に変えてくれるよ
デバッグにも使えるし是非使い方を覚えるべきモジュール
0055nobodyさん
2009/05/03(日) 19:23:56ID:/8WhCxeQ>>49です
ググルでみつけて試しました。
URLやメールはリンクするんですが、
>>49
↑こうするとリンクとして認識するけど指定した番号へ飛ばないですよねー
sub inline_link {
local($_) = $_[0];
$_ =~ s/([^=^\"]|^)((http|ftp):[!#-9A-~]+)/$1<a href=$2
target=_blank>$2<\/a>/g;
$_ =~ s/([!#-9A-~\-\_]+\@[!#-9A-~\-\_\.]+)/<a href=mailto:$1>$1<\/a>/g;
$_ =~ s|>> *(\d+)|<a href="#$1">>>$1</a>|g; ######追記しましま######
$_;
}
0056nobodyさん
2009/05/03(日) 19:50:57ID:???0057nobodyさん
2009/05/04(月) 00:58:02ID:iURbr3UWググルで検索したけどよーわからんです ヒント
0060nobodyさん
2009/05/04(月) 19:40:42ID:???0061nobodyさん
2009/05/04(月) 19:43:36ID:???0062nobodyさん
2009/05/04(月) 20:18:16ID:XDCKuogh戻り値とは違うのか?
0063nobodyさん
2009/05/04(月) 20:39:08ID:???$hoge = 1;
return $hoge;
と同じ
ちなみに
return '1';
でも同じ処理してくれる
0064nobodyさん
2009/05/05(火) 17:54:45ID:???あれやってなんかいいことあるの
0065nobodyさん
2009/05/05(火) 17:59:34ID:???たぶんこれっていいこと
0066nobodyさん
2009/05/06(水) 01:02:43ID:Rmta2zKq0067nobodyさん
2009/05/06(水) 01:11:52ID:???0068nobodyさん
2009/05/06(水) 03:41:14ID:Rmta2zKq0069nobodyさん
2009/05/06(水) 05:37:07ID:???0070nobodyさん
2009/05/06(水) 14:41:20ID:???0071nobodyさん
2009/05/06(水) 21:50:10ID:???↑-wって何ですか?
0072nobodyさん
2009/05/06(水) 21:59:53ID:???くらいしてみろ。
0073nobodyさん
2009/05/06(水) 23:29:17ID:Rmta2zKqありがとう
0074nobodyさん
2009/05/06(水) 23:38:46ID:???0075nobodyさん
2009/05/06(水) 23:41:37ID:???0076nobodyさん
2009/05/07(木) 23:54:26ID:???↑これを真偽の判別ではなく*の部分の文字列を取り出すことは出来ないの?
substrじゃ無理みたいだし
0077nobodyさん
2009/05/08(金) 02:23:11ID:???質問の意味がようわからんがタグの中身を抜き出したいとみた
$str = '<hogehoge>';
$str =~ /<([^>])>/;
$ret = $1;
print "$ret\n";
詳しくは正規表現でググってちょ
0078nobodyさん
2009/05/08(金) 02:35:41ID:???my @files = <*>;
print join "\n",@files; # ファイル一覧が表示される
まぁ俺も質問の意味は全く分からんが。
0079nobodyさん
2009/05/12(火) 05:29:59ID:???0080nobodyさん
2009/05/13(水) 17:40:55ID:???[qw( a b c )],
[qw( 1 2 3 )],
[qw( foo bar baz )],
);
↑みたいな2次元配列を
↓みたいに変えるにはどうしたら良いですか?
my @array2 = (
[qw( a 1 foo )],
[qw( b 2 bar )],
[qw( c 3 baz )],
);
0081nobodyさん
2009/05/13(水) 22:34:27ID:???for my $arrayref (@array1) {
my @array = @$arrayref;
my $idx = 0;
push(@{ $array2[$idx++] }, $_) for @array;
}
0083nobodyさん
2009/05/14(木) 23:18:45ID:???0084nobodyさん
2009/05/14(木) 23:20:12ID:???変数代入のときも同じようにできないの?
0085nobodyさん
2009/05/14(木) 23:36:43ID:???[qw( a b c )],
[qw( 1 2 3 )],
[qw( foo bar baz hoge )],
);
↑こんな感じのときに
a 1 foo
b 2 bar
c 3 baz
undef undef hoge
としたいんですが
>>81のpush付近を書きかえたらできそうなのでやってみます
0087nobodyさん
2009/05/15(金) 10:54:57ID:???データを抽出したいと思っています。
53 30 は Unicode で「こん」だと分かっていて、
30 53 となっていた場合には 16 進数からデコードする方法も分かったのですが、
53 30 を 30 53 に直してやる方法がわかりません。
substr でちまちまやるのではなく、
一括で処理できる方法があれば教えていただけないでしょうか。
0088nobodyさん
2009/05/15(金) 13:36:47ID:???0090nobodyさん
2009/05/18(月) 20:56:08ID:???指定時間になったらコマンドを実行するのに良い方法はありませんか?
while(1){ } の中に入れるのを考えているんですが、毎回時刻を取得して〜と
やるのもスマートじゃない気がして。
0092nobodyさん
2009/05/18(月) 21:29:24ID:???うーん、やっぱりそうですか。ありがとうございます。
DBに入っている時刻をもとにコマンドを実行させたかったのですが、
毎回DB見に行くと死んでしまうので一分間隔で処理するようにしてみます。
0093nobodyさん
2009/05/22(金) 03:21:45ID:???・表示用HTMLページに入力用のテキストエリアとボタン、表示用のテキストエリアを作成。
・ボタンで入力内容をCGIに送信
・Logテキストに保存
・Logテキストから読み込んだ文章を表示用テキストエリアに出力
というものを作りたいのですが、表示用テキストエリアに出力というのがどうすればいいのかわかりません・・・
Perl側で出力先を指定(textareaのnameを指定)して出力するのか、HTMLページ側にJavascript等を併用するのか
ぐぐったりしてみたのですがいまいちわかりません
解決の糸口だけでも教えてくださいorz
0094nobodyさん
2009/05/22(金) 10:15:06ID:???まずは HTML を覚えれバカ。
何を急いでるの?余命1ヶ月なの?
</textarea>
009693
2009/05/23(土) 00:18:41ID:???HTMLは一通り扱えるんですが、Perlは全くの初心者なもので・・・
可能かどうかを知りたくて色々検索したんですが見つからなかったので質問しました。
>>94さんのレスでは<textarea>のタグの性質上、<textarea name="xx">のxxの部分をCGIで出力先と指定する事はできない・・・という意味ですか??
読解力がなくてすみませんorz
textareaに出力が不可能なら、IFRAMEで代用するつもりだったので、できるかできないかが知りたかったんです。
Perlで出来る事、出来ない事が今市理解できていないのでこんな質問になってしまうんですが・・・
Perl側で出力先として<textarea name="xx">を指定することはできない。
テキストエリアを表示したい場合はPerl側でテキストエリアを作成、HTMLページに埋め込む・・・という形にしないといけないという感じでしょうか??
(Perl側で作成したtextareaにテキストを追加していく・・・というような方法は散見しましたので)
0097nobodyさん
2009/05/23(土) 01:32:13ID:???<form action="表示用CGI" method="post">
<textarea name="log"></textarea>
<input type="submit">
</form>
表示用CGIではデータを受け取って(URLデコード)表示させる
#!/usr/bin/perl
use CGI qw/:standard/;
printf(<<EOT, entity(param('log')));
Content-type: text/html
<form><textarea>%s</textarea></form>
EOT
sub entity{
$_[0]=~s/</</g;
$_[0]=~s/>/>/g;
$_[0]=~s/"/"/g;
return $_[0];
}
0098nobodyさん
2009/05/23(土) 03:05:32ID:???横からの質問なんですが、どうしてオススメしないんでしょう。
今自分のスクリプトで外部HTMLを読み込んで変数部分のみ
データに差し替えて出力というのをやっているので気になります…。
0099nobodyさん
2009/05/23(土) 08:49:56ID:???テンプレートエンジン使えってことか?
0100nobodyさん
2009/05/23(土) 16:14:56ID:???0101nobodyさん
2009/05/23(土) 18:51:30ID:mYKiWjxl------------
perlの変数を、出力時にjavascriptの引数として設定してます。
>my $bbb = 111;
>$aaa = "<a href='javascript:void(0);' onClick='javascript:hoge(\"a\", $bbb, \"b\");'>";
------------
普通に問題なく動いていたのですが、
上記を下記のように引数を追加して変更したとたん、ブラウザがoperaの場合のみ挙動がおかしくなりました。
>my $bbb = 111;
>$aaa = "<a href='javascript:void(0);' onClick='javascript:hoge(\"a\", $bbb, \"b\", $ENV{tmpint});'>";
-------------
具体的には出力後のhtmlソースが、
firefox, chrome, IE7の場合は 「<a href='javascript:void(0);' onClick='javascript:hoge("a", 111, "b", 22);'>」
となっているのに対し、
operaのみ 「<a href='javascript:void(0);' onClick='javascript:hoge("a", 111, "b", );'>」
となっていました。
まずoperaキャッシュが怪しいと思ったのですが、問題ありませんでした。
(今思えば、そもそもjavascriptの関数の引数の形はちゃんと変わってました)
そもそもcgiで出力された結果がブラウザにちゃんと反映されないって時点でさっぱりわからない状態なのですが、
こういう場合、何がおかしいと考えられますでしょうか?
■ このスレッドは過去ログ倉庫に格納されています