Perlコーディング初心者質問スレ Part 60
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/09/03(木) 23:51:12ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >2 以降
前スレ http://pc11.2ch.net/test/read.cgi/php/1234752149/
0412nobodyさん
2009/12/25(金) 12:53:54ID:???パッケージ変数(グローバル変数)には色々な型がありますが(スカラー$、配列@、ハッシュ%等)、
それらはグロブを経由して格納されています。
例えば、以下のように様々な型の同名変数が宣言されたとします。
$foo = "hoge";
@foo = ("hoge", "fuga");
%foo = (hoge => 1, fuga => 2);
sub foo { print "hoge" }
このとき、グロブ*fooには、下図に示すように、SCALAR、ARRAY、HASH、CODE・・・(他にもあります)
という場所に、各型に対する実体へのリファレンス(ポインタ)が格納されており、これをスロットと
呼びます。
┏━━━━━━━━━┓
┃ ┌────┐.┃$foo
┃ │SCALAR ┿╋━━→ "hoge"
┃ ├────┤.┃@foo
┃グロブ│ ARRAY ..┿╋━━→ ("hoge", "fuga")
┃*foo .├────┤.┃%foo
┃ │. HASH ┿╋━━→ (hoge => 1, fuga => 2)
┃ ├────┤.┃&foo
┃ │. CODE ┿╋━━→ sub { print "hoge" }
┃ └────┘.┃
┗━━━━━━━━━┛
0413412
2009/12/25(金) 12:54:42ID:???*foo{SCALAR}
*foo{ARRAY}
*foo{HASH}
*foo{CODE}
と型を中括弧で囲んでアクセスできます。
スロットには各変数のリファレンスが格納されているので、実体にアクセスするにはデリファレンス
(リファレンス先の実体を見ること)する必要があります。
例えば、$fooの実体にアクセスするには、
print ${ *foo{SCALAR} }; #=> hoge
とします。
デリファレンスは、リファレンスを中括弧で囲み、適切な型識別子(この場合$)を前に付けます。
このように、実際のアドレス値が格納されているリファレンス(ポインタ)をハードリファレンスと
もいいます。
これに対して、文字列を変数名として認識するシンボリックリファレンス(ソフトリファレンス)
というのもあります。
print ${ "foo" }; #=> hoge
同じく中括弧で囲みデリファレンスします。
0414412
2009/12/25(金) 12:55:31ID:???>1. グロブを使う理由(右辺が関数リファレンスだから$でいいんじゃ。。。)
先述しましたように、関数を登録する場合、グロブのCODEスロットに関数リファレンスを代入する
必要があります
前置きで話した、*fooで説明しますと、*foo{CODE}に関数リファレンスを登録すればいいのです。
*foo = sub { print "fuga" };
この式の右辺が、関数リファレンスなので、Perlはこれを察して、CODEスロットにこの関数リフ
ァレンスを代入してくれます(*foo{CODE}に代入される)。
>2. ここの中括弧の意味(ハッシュでもブロックでもないような。。。)
前置きで話したシンボリックリファレンスのデリファレンスです。
デリファレンスは中括弧で囲みます。
え〜と、ここまで回答しておいてなんですが、私もまだPerl初心者です^^;
色々ググって調べました。
間違いがあれば詳しい人が訂正してくれるでしょう。
0415nobodyさん
2009/12/25(金) 15:55:02ID:???詳しい説明ありがとうございました。
グロブと中括弧によるデリファレンスの考え方が肝であり、
その肝が全く分かっていなかったようです。
まだ完全に理解出来たわけではありませんが、
じっくり考えれば首尾一貫した説明が自分の中で出来そうです。
ところで、
"&foo"は関数の実体である一方、
他方"sub { print "hoge" }"というエクスプレッションは関数へのリファレンスなので、
"sub { print "hoge" }"を"sub { print "hoge" }の実体"とするとより厳密になる気がします。
0416nobodyさん
2009/12/25(金) 17:31:14ID:???確かにコードだけは実体ではないですね。
この辺りの詳しい内容は実用Perlプログラミングに載っているそうです。
0417nobodyさん
2009/12/25(金) 17:55:48ID:???後、デリファレンスにはかぎかっこを使わない方法もある(つか、普通はそっちを使うな)
0418nobodyさん
2009/12/26(土) 12:21:31ID:???とりあえず作ってみた。
答えがあってるかどうかはわからないけど。
my $num_needed = 2010;
my $max = 10**6; # $max個以上の個数は計算しない(無限ループ対策)
my %answer = ( n => 0 );
for my $a1 ( 0 .. $num_needed-1 ) { # 初項
for my $d ( 1 .. $num_needed ) { # 公差
next if ( $num_needed - $a1 ) % $d != 0;
my $n = calc_n( $a1, $d, $num_needed );
@answer{ qw(n a1 d) } = ($n, $a1, $d) if $n > $answer{n};
}
}
print "最大個数は$answer{n}個、その時の初項は$answer{a1}で、公差は$answer{d}";
0419nobodyさん
2009/12/26(土) 12:22:18ID:???sub calc_n {
my ($a1, $d, $num_needed) = @_;
my ($an, $n);
for ( $n = 1; $n < $max; $n++ ) {
$an = $a1 + ($n - 1)*$d;
last if is_divisible_by_square($an);
}
return $an < $num_needed ? 0 : $n;
}
sub is_divisible_by_square {
my $num = shift;
return if $num < 4;
for my $i ( 2 .. int sqrt($num) ) {
return 1 if $num % $i**2 == 0;
}
return;
}
0420nobodyさん
2009/12/26(土) 15:04:14ID:???遅レスなんかすんなよ。
0421nobodyさん
2009/12/26(土) 17:55:21ID:???としたのですがこの行でエラーが起きています。
XML::DOMを使う場合には別途インストールしないといけないのでしょうか?
0422nobodyさん
2009/12/26(土) 17:57:34ID:???0423nobodyさん
2009/12/27(日) 16:45:54ID:???また、xmlがある場合はそれに追加していく形で処理したいのですが
参考になるコードなどはあるでしょうか?
0425nobodyさん
2009/12/28(月) 13:39:29ID:gHIXK3gx現状のテストコードは以下です
(@wordsの末尾要素はタイプミスでカタカナの"ヘ"になってしまっているもの)
use utf8;
use charnames qw(katakana hiragana);
my @words = qw(ヘシ折る へし折る ヘし折る);
for my $word (@words) {
my $re = qr/\N{he}\N{si}折る/; #なんらかの方法でこのような正規表現を作成する
if ($word =~ $re) { print "matched!!\n"; }
else { print "unmatched...\n"; }
}
出力は以下です
matched!!
unmatched...
unmatched...
use charnameのカタカナの方しか効いていません。
useの引数内の順番を変えるとマッチングも変わるので、一方しかマッチしない様子です。
両方マッチさせることは可能でしょうか。
また、Unicodeブロックを使ってもう少し効率的にできそうな気もするのですが、
いろいろ試した範囲では、カタカナやひらがなの有無は判断できても
それ以上には使えない気がしました。(随分調べたのですが・・・
$word =~ /(\N{katakana}|\N{hiragana})+/
これでは@wordsすべてにマッチしますが、"ググる"にもマッチしてしまう
なにかとっかかりがあれば、お願いします
0426nobodyさん
2009/12/28(月) 13:55:13ID:???どちらかに変換してマッチさせたほうがスマートな気がする
0427425
2009/12/28(月) 13:56:20ID:???×$word =~ /(\N{katakana}|\N{hiragana})+/
○$word =~ /(\p{InKatakana}|\p{InHiragana})+/
0428nobodyさん
2009/12/28(月) 14:25:43ID:???おかしくて、
use charnames qw(katakana hiragana);
と2つ書いても検索の順番を決めてるだけ。
同じ名前があれば先に見つけた方になる。
うまいこと文字クラスにしてくれるような便利な
ものではない。
[へヘ][しシ]でいいんじゃねーの?
0429nobodyさん
2009/12/28(月) 14:37:42ID:???0430425
2009/12/28(月) 14:42:33ID:???正規表現の方ですが、次の記述で対応できそうでした。
(>>425の変更部分の抜粋)
use charnames qw(:full);
my $re = qr/[\N{KATAKANA LETTER HE}\N{HIRAGANA LETTER HE}]
[\N{KATAKANA LETTER SI}\N{HIRAGANA LETTER SI}]折る/x;
けどこれだと>>428をややこしくしただけ・・・
両方にマッチする記法があるはずというところからスタートしてしまったので、
ちょっとハマってしまっていたようですm(_ _)m
0431nobodyさん
2009/12/29(火) 07:27:32ID:???case sensitiveでない検索エンジンを作ったときはその対策でいったな。
インデックス作る時に全部一旦大文字に変換して流し込んだ。
ちなみにヶ、ヵは本来漢字やその誤用だからひらがなにすべきではないし、
ヴは本来外来語の表現専用だからひらがなにすべきではないと俺は思う。
だからやるんだったら平仮名->片仮名変換。
0432○~* ◆q7u/null4U
2010/01/01(金) 04:02:13ID:PXOfMB4Rことよろ.
0433今日からperl
2010/01/02(土) 20:11:44ID:jeXHm8zZ2:5_10.dbがないと言われたので勝手に空のファイル作ったら
3:ダウンロードできたみたいな雰囲気になったけど、ダウンロードされてない。
宜しくお願いします。
0434nobodyさん
2010/01/03(日) 08:10:22ID:???sudo cpan -i XML::RSS
これで質問に適当に答えればインストールされるはずだが。
2: は何でのエラー?cpanコマンド?
0435今日からperl
2010/01/03(日) 13:03:19ID:6EQQX2jnsudoは内部コマンドまた外部コマンド、操作可能なプログラムまたはバッチファイル
として認識されていません。と出ます。
cpanと打つと動いて
cpan>
の画面になります。そこでinstall XML::RSSと打つと
長々と動きますが、途中でさっきの「内部コマンドまたは外部〜」
のエラーが出たり、makefile NOと最後のあたりに出たりします。
0436nobodyさん
2010/01/03(日) 13:25:56ID:???windowsのactiveperlならcpanじゃなくてppm使え
0437今日からperl
2010/01/03(日) 14:47:50ID:6EQQX2jnactiveperlをインストールしました。
必要な情報がわかりませんのですいません。
0438今日からperl
2010/01/03(日) 14:51:40ID:6EQQX2jn〜5_10.dbが
unable to open database file
と帰ってきます。
0439nobodyさん
2010/01/03(日) 17:38:27ID:???0440nobodyさん
2010/01/03(日) 17:41:26ID:???0441nobodyさん
2010/01/04(月) 01:50:08ID:???エラーの原因を人に聞くときは、
> 〜5_10.dbが
などと勝手に省略しないで、丸ごとコピペするのが鉄則。余りに長い場合を除くが。
>>440
DOS時代からPC使っていると本能的に避けてる問題だから、ユーザー名に漢字を使っていてエラーになったPCをチェックしたとき、それが原因だと気づくまではまったことがある。
0442nobodyさん
2010/01/04(月) 11:09:43ID:???と思って入力したら、実は全角が入ってて泣いた。
0443nobodyさん
2010/01/04(月) 14:11:57ID:N9GeTuHkいい感じのフリースクリプトのページを見つけたのですが、
改造したいのにどこを変えればいいのか、全然意味がわかりません!
http://homepage1.nifty.com/kkuri/computer/ExAuction.html
ここに載ってるスクリプトをどなたか解説していただけませんか??(涙)
0444nobodyさん
2010/01/04(月) 17:13:05ID:???授業料払ってくれるならな・・・。
ついでに言えば一体何年前のスクリプトなんだといいたくなる位
ひどい代物だから学ぶことなんか何もないぞ。
0445nobodyさん
2010/01/04(月) 19:24:02ID:???0446nobodyさん
2010/01/04(月) 19:34:23ID:N9GeTuHk古いものなんですか、初心者過ぎてわかりませんでした。
フリーマーケットの出来るプログラムを書きたかったんですけど、独学じゃ無理っぽくて。
エクセルも使えないし(涙)
0447nobodyさん
2010/01/04(月) 19:43:17ID:N9GeTuHk愚痴すいません。
0448nobodyさん
2010/01/05(火) 07:28:10ID:???そういう時のためにサポート付きのプロダクトがあるわけだが。
まあ普通それなりの値段はするから覚悟しとけよ、と。
結局必死で勉強するか金払うかの二択。
0449nobodyさん
2010/01/05(火) 09:53:32ID:???0452nobodyさん
2010/01/05(火) 16:51:16ID:???とりあえず一定規模以上の開発にCGIスクリプトはありえん。WAF使えと。
WAF: Catalyst
DB: DBIC / CDBI
Tmpl: TT / CS
Moose Catalyst使うならMooseも覚えとけ。
サンプルはそれぞれのマニュアル参照。
フリマのサンプル?知るか。有償で作ってやってもいいが。
0454nobodyさん
2010/01/05(火) 17:15:38ID:???0455nobodyさん
2010/01/05(火) 17:18:20ID:???Plackはレイヤーが違う。
Plack::Apache2とCatalyst::Engine::Plack入れときゃいい話で
WAF使うならPSGIは意識しなくていい。
モジュール名はうろ覚えだから間違ってたらスマソ。
0456nobodyさん
2010/01/05(火) 17:27:13ID:???それとPerlバインディングは妙な使いづらさがある
速いのはいいんだけど
0457nobodyさん
2010/01/05(火) 17:32:59ID:???俺はふつーCSだろとか思ってるんだが、そういうツッコミがあると
思ってTTも併記しといた。TTはXSじゃないよな多分。
0458nobodyさん
2010/01/05(火) 20:58:54ID:???入り口としては簡単な部類に入ると思う
0459nobodyさん
2010/01/05(火) 21:26:39ID:???どんだけアクセス捌く予定だよ
0460450
2010/01/05(火) 23:34:33ID:???色々とthxです。
ちなみに>>450 = >>398で、>>443とは別人です・・・。
モジュールの中身を初めて読んでちょっと死にそうだったので、
もう少し身の丈にあったものがあるかなと・・・
0461nobodyさん
2010/01/06(水) 00:47:37ID:???0462nobodyさん
2010/01/06(水) 08:59:56ID:UNfDPcgPWindows XP Professional SP2で、apache2.2を動かしていて、
perl v5.10.0でプログラムを書いていますがうまく動きません。
具体的には、
http://www.stackasterisk.jp/tech/program/perl04_02.jsp
に書いてある★Dにsleep 10;を書くと、すぐにブラウザが開放されず、
10秒ほど読み込み中の状態になります。すぐにブラウザが開放されて、
バッファされてる出力も書き出されるのが希望なのですが、
Windowsを使っているのが悪いのでしょうか?
0463nobodyさん
2010/01/06(水) 09:12:27ID:???よく知らんがWindowsはperforkでのエミュレーションだからだろうな。
sleepはシステムコールだからプロセス潰すし。
0464nobodyさん
2010/01/06(水) 09:55:50ID:???お返事ありがとうございます。forkにこだわるつもりは無いのですが、
Windowsをサーバーにして、出力を全て出しつつ裏で時間のかかる処理を
続けるということは、可能なのでしょうか? $|=1とかも試したのですが、
ダメでした。
0465nobodyさん
2010/01/06(水) 11:20:05ID:???forkせずに、単にclose(STDOUT);してsleepするだけだとどうなる?
0466nobodyさん
2010/01/06(水) 12:12:42ID:???STDERRも閉じてみたらどうだろ。
0467nobodyさん
2010/01/06(水) 12:50:51ID:???今やってみたのですが、10秒程度読み込み中が続きました。
>>466
こちらはうまく行きました!ありがとうございます。
今本当に動かしたいプログラムを書き換えています。
また何か聞くかもしれませんがそのときはよろしくお願いします。
0468467
2010/01/06(水) 15:56:39ID:g9KuWVT/perlの処理は20分もあれば終わると見積もっているのですが、
Apacheの設定ではデフォルトは300秒でタイムアウトですよね。
これを回避するには c:/xampp/apache/conf/httpd.conf を書き換える
しかないのでしょうか。 http://httpd.apache.org/docs/2.2/mod/core.html#timeout に
その解説があるので、httpd.confの http://httpd.apache.org/docs/2.2/mod/core.html#options と
書いてある<Directory "C:/xampp/htdocs">のところに適当に Timeout 1200 と書きましたが
いちおうこれで動いているようなのですが、大丈夫でしょうか?
ちょっとスレ違いになってしまいますが、よろしくお願いします。
0469nobodyさん
2010/01/06(水) 16:17:40ID:???462で出力を閉じた時点でApacheの処理は完了していて、タイムアウトとか関係なくなるように思うが
0470nobodyさん
2010/01/06(水) 17:16:19ID:???0471nobodyさん
2010/01/06(水) 17:21:16ID:???0472nobodyさん
2010/01/06(水) 17:28:11ID:U4hPtr/3で、処理完了時に適当なファイルを作るようにすれば、そのファイルの有無で
処理の完了がわかる。
0473467
2010/01/07(木) 11:53:58ID:???Apacheのhttpd.confの書き方はまずかったようで、元に戻しました。
で、STDERRを閉じただけでは、なぜか時間のかかる処理部分は実行されない
という結果になりました(ブラウザは開放されます)。
で結局forkを使って子プロセスに処理させるようにして
とりあえずの目標は達成されたようです。いろいろとありがとうございました。
0474467
2010/01/07(木) 22:52:52ID:???秘密にする意味も無いので、お教えしますと、こんなページを作っています。
freesoft板@Virtua ch
http://virtua-ch.ddo.jp/cgi-bin/read.cgi?freesoft
興味があればご覧下さい。
0475nobodyさん
2010/01/07(木) 22:58:16ID:???書き出したファイルの内容と新しく吐いたソースの比較はどうすればできますか?
宜しくおねがいします。
0476nobodyさん
2010/01/08(金) 00:33:17ID:???そのURLだけじゃまったく分からないがエスパーすると
普通、ログの収集にはcronなりその類のスケジューラを使うと思う
>>475
>phpの吐いたソースを書き出して
ここが意味不明
phpの吐いたソースとは何のソース?
そしてそのソースを書き出すのはいったい誰?phpのように思うんだが
0477nobodyさん
2010/01/08(金) 06:01:19ID:???diffってコマンドは知ってるよね?Macには標準で入ってるし、
Winもdiffで検索すれば比較ソフトは出てくる。
俺がお勧めなのはvimdiffだがな。
0478475
2010/01/08(金) 19:43:24ID:???ごめんなさい。
0479nobodyさん
2010/01/10(日) 01:28:27ID:???Perlで組んでいるらしいのだが
負荷に耐えられないと嘆いてる。誰か助けてやってくれ
0480nobodyさん
2010/01/10(日) 02:34:52ID:???それはさておき、どんなに頑張ってもコードだけじゃ解決できない問題のような気がするぞ
サーバを増やすなどしてスケールアウトするのが一番なんじゃね
0481nobodyさん
2010/01/10(日) 19:02:07ID:???0482nobodyさん
2010/01/11(月) 09:59:05ID:???Twitterタイプのサービスか?
Twitterがどれだけ設計とスケールに苦労して今の状態を維持してるのか
1000回くらいググってから出直せ。
0483nobodyさん
2010/01/12(火) 23:50:01ID:???0484nobodyさん
2010/01/13(水) 07:23:08ID:???最新のtweet、ちょっと古いtweet、もっと古いtweetとサーバーを分けて
それぞれ必要なだけスケールする手法を取ってた気がする。
また変えたかも知れんが。
0485nobodyさん
2010/01/17(日) 17:46:44ID:???これ(a)を数える方法を教えてください。
0486nobodyさん
2010/01/17(日) 17:49:09ID:???もしくは
$hoge = s/(a)/$1/ig;
0487nobodyさん
2010/01/17(日) 17:50:17ID:???0488485
2010/01/17(日) 17:55:30ID:???0489nobodyさん
2010/01/17(日) 18:17:50ID:Ido2Vdjf0491nobodyさん
2010/01/18(月) 15:49:13ID:???以下のようなハッシュがあります。
$SERIAL = {
'1263794915' => {
'link' => 'http://localhost.com/',
'delete_flg' => '1',
'day_end' => '2010/01/15 24:10:19',
'title' => 'そろそろ',
'day_start' => '2009/12/15 24:10:19'
},
'1263794833' => {
'link' => 'http://localhost.com/',
'delete_flg' => '1',
'day_end' => '2010/02/15 24:10:19',
'title' => '本当におねがいします',
'day_start' => '2009/12/15 24:10:19'
},
'1263794894' => {
'link' => 'http://localhost.com/',
'delete_flg' => '1',
'day_end' => '2010/02/15 24:10:19',
'title' => 'とりあえずこれでおいておくか',
'day_start' => '2009/11/15 24:10:19'
},
};
$hash{'ID'}{'day_start'} の 開始日付でソートしたいのですがどうすればよろしいでしょうか?
0492nobodyさん
2010/01/18(月) 16:12:12ID:r5bEwLM5だけでいいような気がする
0493nobodyさん
2010/01/18(月) 16:15:20ID:???0494nobodyさん
2010/01/18(月) 16:32:26ID:r5bEwLM50495nobodyさん
2010/01/18(月) 16:34:05ID:???@keys = map{s/\///g} @keys;
@sort_keys = sort {$a <=> $b} @keys;
何がやりたいのか分からんけどこれでいいか?
0496nobodyさん
2010/01/18(月) 16:36:10ID:???$SERIAL->{$a}->{day_start} cmp $SERIAL->{$b}->{day_start}
# 文字列比較だから時刻に24時とか0時が混在してると変なことになるので、
# それが嫌ならstrptimeとかtimelocalでエポックに戻して数値比較するなりなんなり。
} keys %$SERIAL;
for my $id (@ids) {
# やりたい処理
print $SERIAL->{$id}->{ほげほげ}, $/;
}
ソート後のを元の$SERIALと同じ形式で格納するのはハッシュリファレンスじゃ無理。
0497nobodyさん
2010/01/18(月) 16:36:21ID:r5bEwLM5かな?
携帯からソース書くのって面倒臭いね
0498nobodyさん
2010/01/18(月) 16:37:11ID:???@keys = map {$SERIAL->{$_}->{day_start}} keys %$SERIAL;
@keys = map {s/\///g} @keys;
@sort_keys = sort {$a <=> $b} @keys;
こうだったわ
0499nobodyさん
2010/01/18(月) 16:46:12ID:???@keys = map {$SERIAL->{$_}->{day_start}} keys %$SERIAL;
@keys = map {s/[/:\s]//g} @keys;
@sort_keys = sort {$a <=> $b} @keys;
0500nobodyさん
2010/01/18(月) 17:03:19ID:???DateTimeでオブジェクトにしようとしたら24時ってあってうまくいかなかった。
つか、みんな頭いいな。
必死にindex作ってたよ
# day_startのDateTimeをkeyにしたhash
my %SERIAL_id_of;
my $fmt = DateTime::Format::Strptime->new(pattern => '%Y/%m/%d %T');
for my $id (keys %{$SERIAL}) {
my $datetime_of_day_start = $fmt->parse_datetime($SERIAL->{$id}->{day_start});
alias my $ids_ref = $SERIAL_id_of{$datetime_of_day_start};
if ($ids_ref) {
push @{$ids_ref}, $id;
}
else {
$ids_ref = [$id];
}
}
warn Dumper %SERIAL_id_of;
my @sort_ids;
for my $datetime_of_day_start (sort keys %SERIAL_id_of) {
push @sort_ids, @{$SERIAL_id_of{$datetime_of_day_start}};
}
warn Dumper @sort_ids;
0502nobodyさん
2010/01/19(火) 15:02:27ID:???最後の行あたりでよくわからないエラーをはいてしまい、実行すらできません。。
#円周率の近似値を求めるプログラム
$count=0;
for($n=1; $n<=1000; $n++){
$x=(rand);
$y=(rand);
$point = ($x * $x) + ($y * $y);
if($point<1){
$count++;
}
$pi= $count / $n;
$pi= sprintf "%.8f";
$pi= pi * 4;
printf "the loop repeated %d time",$n;
printf "pi is %.8f",$pi;
0503nobodyさん
2010/01/19(火) 15:06:31ID:???0504nobodyさん
2010/01/19(火) 15:09:10ID:???0505nobodyさん
2010/01/19(火) 15:09:51ID:???Missing right curly or square bracket at ...
0506nobodyさん
2010/01/19(火) 15:28:07ID:???0507nobodyさん
2010/01/19(火) 18:54:30ID:???以下の処理で文字コードの関係により困ってます。
クライアント側のjavascriptでjsonファイルを扱います。
jsonファイルはPerlの「print $jsonobj」によって吐き出します。
PerlscriptはUTF-8、jsファイル・htmlファイルはshiftjisです。
PerlでEncodeによりutf8→shiftjisにしているのですが、それ以外になにかやる事があるのでしょうか?
☆☆☆javascript☆☆☆
document.write('<script type="text/javascript" src="Perlで書いたjsonファイルをはくプログラム"></script>');
☆☆☆ Perl ☆☆☆☆
$jsonobj = q| array_jeson = |.$jsonobj;
Encode::from_to($jsonobj,'utf8','shiftjis');
print $jsonobj;
0509507
2010/01/19(火) 19:27:54ID:???Content-Type: text/html; charset=☆☆☆\n\n
☆☆☆の部分がミスってただけでした orz
UTF-8で出力したりいろいろパターンがあってミスってました
0510nobodyさん
2010/01/21(木) 00:41:21ID:???mod_perlのように、グローバル変数を使うと同じプロセス内の別スレッドから見えてしまうということはあるのでしょうか。
また、1リクエスト1プロセスを前提にした time . $$ の値は、同時に複数のリクエストで同じ値を持ちうるのでしょうか。
同一プロセスでもスレッドを識別するための情報を識別する環境変数はありますか?
thread-safeなPerlプログラミングの記事やドキュメントなどをご存知でしたらどなたか教えてください。
0511nobodyさん
2010/01/21(木) 17:39:33ID:???・print "Content-Type: text/html\n\n";以降の行にコメントを書く → 500エラー
・HTML::Templateのサンプルそのままコピって、my $tmpl_out = $template->output; → 500エラー
my $out = $template->output;
print "$out";ならセーフ。
ちょっと厳格すぎる気がするのですが、こんなモンでしょうか?
■ このスレッドは過去ログ倉庫に格納されています