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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/11/26(日) 14:38:23ID:SlmGsFMB
Perlのコーディングで困ってる人のスレです。

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

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

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

お勧めサイトは >>2-10

前スレ http://pc8.2ch.net/test/read.cgi/php/1153987463/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0312nobodyさん2006/12/16(土) 22:42:14ID:lMy9T+vR
(プログラム技術版で質問したところ、ここで質問した方がよいと言われたため、マルチポストしました)

perlに触れて2日目です。。かない痛いミスしてるかもしれませんが、何方か教えてください。

Flashからcgiへ変数$nameを渡す実験をしているのですが、$nameを日本語にすると
すべて文字化けしてしまいます。手元にある入門書を参照したところ、jcode.plを使えばよいとあったので、

require 'cgi-lib.pl';
require 'jcode.pl';
&ReadParse(*name);
&jcode::convert(*name,'sjis');
print "$name";

としたのですが、まだ文字化けします。sjisにしてもeucにしても同じ結果です。
どうすればよいでしょうか。jcode.plが存在するディレクトリは確認しました。


0313nobodyさん2006/12/16(土) 22:55:56ID:???
for (keys %name){
&jcode::convert(\$name{$_},'sjis');
}
0314nobodyさん2006/12/16(土) 23:05:09ID:lMy9T+vR
それでも文字化けします…。どうしてだろう。。
0315nobodyさん2006/12/16(土) 23:10:28ID:???
>>314
ver6ぐらいからutfでないっけ
03162872006/12/17(日) 12:12:23ID:???
あーダメだ。Yahoo!JapanとかならOKだがログイン画面すら取ってこれない
java.lang.NullPointerException のみが出力されてくるのですが、御教示お願いします。


use LWP::UserAgent;
$url = "https://example.com/test.jsp";; #実際にはログイン画面のURLが入ってる
$ua = LWP::UserAgent->new;
$req = new HTTP::Request GET => $url;
$res = $ua->request($req);
print "Content-type: text/html\n\n";
print $res->content;
0317nobodyさん2006/12/17(日) 12:34:57ID:???
>>316
とりあえず普通にアクセスしたときの通信をトレースして
それを忠実に再現するしかないんじゃまいか
03182872006/12/17(日) 13:35:07ID:???
>>317さん
やっぱ皆さんこういう高度なのもサクっと作ってcron自動化とかしてたりするんでしょうか

ID・PASSなどをフォームに入れるログイン作業程度なら、
ローカルHTMLのformにhiddenで入れてしまって、jsで一発ログインとかしてるのですが、
一定時間ごとに自動ログイン→一連の作業→処理保存までするのは難しいですね。
もっと色々頑張ってみます
0319 ◆TWARamEjuA 2006/12/17(日) 15:50:40ID:????BRZ(6677)
>>318
その点、LWPモジュールも然りサンプルが必ずと言っていいほど掲載されているので、熟読すると良いかもしれませんです♪@CPAN
あっと、そのときには、解説の英文を1から10まで読むよりも、サンプルを1から10まできっちりと読むと判りやすいかと♪
0320nobodyさん2006/12/17(日) 15:56:53ID:8qXdAMYD
教えてください!
www.xxx.com/aaa.php?id=1&next=1
nextの1で処理を行っているのですが
リロードでも有効になってしまいます。
これを回避する方法などありますでしょうか。

submitからなら対策できるのですが、埋め込んだURLからは
どうしたら回避できるかわからず詰まっています。
0321nobodyさん2006/12/17(日) 15:58:27ID:8qXdAMYD
かくとこ間違えました。すいません。。
0322nobodyさん2006/12/17(日) 22:23:05ID:???
>>318
WWW::Mechanize とか
0323nobodyさん2006/12/18(月) 16:04:35ID:otF+VpE2
質問させてください。

POSTで$nameを送信($nameは日本語)
    ↓
cgi側が$nameを受け取って、namelist.datをオープンして、$nameを書き込んでクローズ。
    ↓
namelist.datを開くと、日本語が%83g%83%7D%83gといった感じで書き込まれている。

これを直したいのですが、namelist.datに書き込む前にjcodeで変換しても駄目でした。
文字コードはsjisで統一してあります。どのようにすれば文字化けせずに書き込めるのでしょうか。
0324nobodyさん2006/12/18(月) 16:09:24ID:???
受け取りと変換部分kwsk
0325nobodyさん2006/12/18(月) 16:27:36ID:otF+VpE2
323です。解決しました。。URLデコード&エンコードが原因でした。

>>324
お手数かけました。
0326nobodyさん2006/12/18(月) 20:56:29ID:???
sub disp_HTML {
print "Content-type: text/html\n\n";
print <<EOS;
<HTML lang="ja">
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<TITLE>$_[0]</TITLE>
</HEAD><BODY>
$_[1]
</BODY></HTML>
EOS
exit;
}
POSTされた文字列が不正だった場合等に、ちょっとしたエラー出力をするのに、
こんな感じで単純な出力をするサブルーチンを作って実行するのと、
print "Content-type: text/html\n\n";
print <<EOS;
<HTML lang="ja">
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<TITLE>エラー</TITLE>
</HEAD><BODY>
えらーです
</BODY></HTML>
EOS
exit;
}
そのままサブルーチンを作らずにHTMLを出力するのとではどれくらい速度に違いが出たりするのでしょうか。
0327nobodyさん2006/12/18(月) 21:00:45ID:???
エラー画面ということは、いろんな場所から呼び出される可能性があるので、サブルーチンにする。
またはテンプレート化する。
しかし、速度を気にするほど頻繁にエラー画面が出てしまう設計はどうかと。
0328nobodyさん2006/12/18(月) 21:03:25ID:???
content-type が出力されたかどうかのフラグは保持しておいた方がいいよ
0329nobodyさん2006/12/18(月) 21:14:08ID:???
>>327
どうもです。
エラーは極力でないように、悪意に対応できるようには作っているつもりなんですが
なんせ自分で一から作るのは初めてなもので、単純に速度が気になったのです。
それほどアクセスが掛かるようなものでもないですし、自分で使う分にはエラーなんて出さないように使うので
そんなに問題でもないんですが一応。

>>328
具体的にはどうすればよいのでしょうか。
print "Content-type: text/html\n\n";
はサブルーチンにせずに都度出力すると言うことでしょうか。
0330nobodyさん2006/12/18(月) 21:25:58ID:???
フラグなんて不要
いちいちフラグ確認しないとダメな書き方はよほどおかしい
0331nobodyさん2006/12/18(月) 21:39:31ID:???
>>329
処女作おめでとう。
速度なんか後回しで、まずは思うように作ってご覧。

そして、>>330が正解。
エラーチェックを全て終わらせてから出力をはじめよう。
0332nobodyさん2006/12/18(月) 21:57:14ID:???
>>331
そうですね。そうすることにします。

ありがとうございました。
0333nobodyさん2006/12/18(月) 23:22:23ID:???
サブルーチンが定義されているかどうかを調べるにはどうすればいいでしょうか。
条件として、サブルーチン自体にエラーがない保証というのがあり、
evalだと単純に$@の有無だけでサブルーチンの有無とすることができません。

シンボルテーブルを覗いたり、いろいろ調べてはいるのですが、よく分かりません。
シンボルのハッシュを参照したら、サブルーチンがないのに、参照したことによって
シンボルが追加されてしまうようです。
↑よく理解してないためか、そのように見えます。

ご助言いただければと思います。
0334nobodyさん2006/12/18(月) 23:23:54ID:???
エラーがない保証がない、でした
0335nobodyさん2006/12/19(火) 00:17:15ID:???
単純に defined(&subname) じゃダメ?
0336nobodyさん2006/12/19(火) 00:27:12ID:???
>サブルーチン自体にエラーがない保証がない

どんな設計だ
0337nobodyさん2006/12/19(火) 00:39:23ID:???
そういえばRailsスレはあるのにCatalystスレはないんだな。
やっぱ使ってる奴いないのか?
0338nobodyさん2006/12/19(火) 00:41:15ID:???
> 単純に defined(&subname) じゃダメ?

できちゃいました。すみません。そんな簡単だったんですね。
シンボルテーブル参照は、単純にパッケージ修飾の仕方で間違ってたようです。
ありがとうございました。
0339nobodyさん2006/12/19(火) 06:32:32ID:???
今北産業&流れを見ずにレス

>>316
LWPでhttpsはCrypt::SSLeayが要るんだけど、入ってないからダメって落ちじゃないよね?
0340nobodyさん2006/12/19(火) 09:33:57ID:???
すごく初歩的な質問ですが、行き詰っていますorz

$OLDには 0-6の数字または文字列が入ります。
数字の時には10〜60代を、文字列の場合はそのまま代入したいのですが、

if ( $OLD == 0 ){ $OLD = "10代"; }
elsif ( $OLD == 1 ){ $OLD = "20代"; }
.
.
.
elsif ( $OLD == 6 ){ $OLD = "60代"; }
else { $OLD = "$OLD"; }

このようにかいているんですが、最後のelseが反応せず、文字列はすべて10代と表示されてしまいます。
なにか書き方が間違っていると思うんですが、わかりませんorz 指摘してください。
0341nobodyさん2006/12/19(火) 10:25:25ID:???
数値以外が入るなら==じゃだめ。
つ eq、正規表現
03423402006/12/19(火) 10:34:36ID:???
Σ(゚Д゚|||)
試したら・・・できました。ありがとうございました! 勉強になりましたorz
0343nobodyさん2006/12/19(火) 10:44:06ID:???
プログラミング初心者です。

mod_perlは、
はじめの一回コンパイル→メモリ上に常駐
とネットで解説されていたんですが、
perlでもコンパイルしたものを配ったりってできるんでしょうか?
ソースを公開しないで、スクリプトが配布できたら
いいなと思いまして。
0344nobodyさん2006/12/19(火) 11:15:24ID:???
どこから突っ込んでほしい?
0345nobodyさん2006/12/19(火) 12:09:00ID:???
Perlで言うコンパイルはその場合意味が違うよ
あと、コンパイルは同じ環境でやらないといかんから配布向きじゃない
0346nobodyさん2006/12/19(火) 12:10:49ID:???
mod_perlがコンパイルしてmod_perlが常駐させるものでperlスクリプトが常駐できるものではない
(出来るには出来るがkillされるのがオチw)
0347nobodyさん2006/12/19(火) 15:31:43ID:???
>>345
>>346
なるほどです。ソースは公開しないといけないんですね。

>Perlで言うコンパイルはその場合意味が違うよ
・コンパイルって、コンピュータ用のオブジェクトコードに
することでよかったですよね?

・Perlでおいコンパイルは、機械語に直したオブジェクトコードを
メモリに保存しておいて2回目の起動以降は、ソースにアクセスしないで
メモリのオブジェクトコード読んで実行するということでよかったでしょうか。

・機械語は機械語でもC、Perl、JAVAでできたものは、全く別物なんでしょうか。
こういうのはどうやって勉強すれば。コンパイラの本読むとわかるでしょうか。

なんかネットに書いていることをそのまま質問していて、
ほんとアレなんですが、よろしくお願いします。
0348nobodyさん2006/12/19(火) 15:44:15ID:???
347です。
いろんなページさまよっているところなんですが。

JAVAは中間コードっていうのみたいですね。
C言語はexeファイルができます。
ちょっと手がかり見つかってきました。
JAVAマシーンが中間コードを読んで実行するみたいに、
mod_perlマシーンが、中間コードみたいなの動かすんでしょうか。
0349nobodyさん2006/12/19(火) 16:07:15ID:???
つ チラシの裏
0350nobodyさん2006/12/19(火) 16:08:29ID:???
mixiにでも書いとけ
0351nobodyさん2006/12/19(火) 18:18:58ID:???
配列とrand関数を組み合わせたいのですが表示できません。
どうしたらよいでしょう?
@nakami = (0, 8, 4, 12, 23, 55);
foreach $aaa(@nakami){
if(rand $aaa){
0352nobodyさん2006/12/19(火) 18:34:27ID:???
>>351
なにがしたいのでしょう?
0353nobodyさん2006/12/19(火) 18:54:33ID:???
>347
ラストね
コンパイルの解釈はまぁ OK

Perl でのその解釈は mod_perl の解釈
CGI で動く perl はその都度コンパイルされます
0354nobodyさん2006/12/19(火) 20:41:11ID:???
つ rand( @nakami );
0355nobodyさん2006/12/19(火) 23:24:08ID:???
教えていただけないでしょうか。
log.txtを開いてハッシュとしてセットの上、ペアごとにズラズラ並べたいのですが、

open(f,"log.txt");
%file = <f>;
while ( ($key, $val) = each (%file) ) {print "キー $key 値 $val\n";}
close(f);

これだと何も反応してくれません。
間違ってるでしょうか?

log.txtの中身は、
"●●","A組","◎◎","B組","■■","C組",

といった感じです。
0356nobodyさん2006/12/19(火) 23:37:17ID:???
>>355
ファイルから読み込んだ文字列は、そのままではリストとして扱われません。
文字列をハッシュ変数に代入しても意味がありません。

例えば、以下のような方法で、文字列をリストに変換する必要があります。

・split でカンマ区切りのリストに分解する(ただし二重引用符の除去が必要)
・Text::CSV_XS などのモジュールを利用する(二重引用符も考慮してくれるが少し大げさ)
・正規表現(http://www.din.or.jp/~ohzaki/perl.htm#CSV2Values)を利用する
・eval で評価する(読み込むファイルが外部からの入力を記録している場合は危険)

この場合、正規表現が一番現実的でしょうか。
03573552006/12/20(水) 00:01:50ID:???
>>356
ありがとうございます。
%file = <f>; ←こんな式はないんですね。お恥ずかしい限りです。

まだcgiを作っている途中で二重引用符を外す事はわけないですので、
最初の方法か、正規表現かで検討してみます。

わざわざすいません。
0358nobodyさん2006/12/20(水) 00:38:56ID:???
区切りを改行にすれば%file = <f>;でいけるよ
もちろんキーにも値にも最後に改行がつくからchompとかしなきゃだめだけど
こんな感じで
●●
A組
◎◎
B組
■■
C組
0359nobodyさん2006/12/20(水) 00:50:18ID:???
my %virtues = map { chomp; $_ } <DATA>;
print "$virtues{ONE}\n";
print "$virtues{TWO}\n";
print "$virtues{THREE}\n";
__DATA__
ONE
Laziness
TWO
Impatience
THREE
Hubris

なるほど。
0360nobodyさん2006/12/20(水) 07:51:48ID:???
汎用性考えたらこっちだろ?(区切り文字はその時々だけど)

my %virtues = map { chomp; split /,/, } <DATA>;
print "$virtues{ONE}\n";
print "$virtues{TWO}\n";
print "$virtues{THREE}\n";
__DATA__
ONE,Laziness,TWO,Impatience
THREE
Hubris
0361nobodyさん2006/12/20(水) 07:54:31ID:???
「汎用性」じゃねえな。
「そこまでするなら」に代えてくれ
0362nobodyさん2006/12/20(水) 11:11:45ID:S+pohGEQ
コーディングのときに検索エンジンにかかりやすくするにはどうしたら良いんですか?
0363nobodyさん2006/12/20(水) 11:33:14ID:???
SEOでぐぐれ
びっくりするほどスレ違い
0364nobodyさん2006/12/20(水) 12:18:48ID:???
>>362
とりあえず、ストリクトなHTMLを吐くように書けばいいと思う。
0365nobodyさん2006/12/20(水) 13:09:42ID:???
>>364
少なくとも、ロボ物は適当で簡素なHTMLの方が拾ってくれたりするよ
<html>
<head>
<title></title>
</head>
<body>

</body>
</html>
こんな感じの
0366nobodyさん2006/12/20(水) 13:20:25ID:???
それどこのクソエンジンだよw
0367nobodyさん2006/12/20(水) 14:02:06ID:???
>>365
それストリクトじゃん。
0368nobodyさん2006/12/20(水) 14:35:34ID:???
DOCTYPE が無いのに strict とか、もう一度勉強し直した方がいいと思うよ
0369nobodyさん2006/12/20(水) 14:54:20ID:???
HTMLスレでやれ。
0370nobodyさん2006/12/20(水) 16:33:01ID:???
ストラトスには憧れたな
03713552006/12/20(水) 17:16:24ID:???
>>356
>>358
>>359
>>360

サンキューです。無事完成しました。
0372nobodyさん2006/12/20(水) 20:05:38ID:???
ストラトス・フォー
0373nobodyさん2006/12/21(木) 13:16:34ID:???
掲示板で禁止ワードが多くなってきたので、禁止ワードだけを別ファイルに
して読み込もうと思ったのですが、

if (!open(WORD,"bad.txt")) { &error('データベース読取エラー'); }
foreach(<WORD>){
if ($name eq $_){ $name = "禁止";}
}
close(WORD);

この記述では反応してくれません。(errorはでません)
外部ファイルにする前はできていたのですがなにか書き方が違うのでしょうか・・・?
bad.txtの中身はすべて改行区切りです。
また名前欄に特化した禁止ワードなので、eqで問題ありません。
よろしくお願いします。
0374nobodyさん2006/12/21(木) 13:34:43ID:???
chompしないと改行がついたまま
0375nobodyさん2006/12/21(木) 13:35:57ID:???
改行
0376nobodyさん2006/12/21(木) 17:21:37ID:???
またお世話になります

掲示板の本文中にurlがあったとき自動リンクさせますが、
jpg、png、gifのときは画像を小さく表示させたいです

正規表現で末尾を(jpg|png|gif) として区別しますが、
そうでない場合の表現はどうしたらいいですか?
0377nobodyさん2006/12/21(木) 17:25:31ID:???
!
0378nobodyさん2006/12/21(木) 17:31:55ID:???
>>376
他鯖の画像を無断リンクするわけ?
0379nobodyさん2006/12/21(木) 18:29:02ID:???
普通の画像ならまだしも何か仕込まれてたりしたら見るだけで被害者が続出だな。
まさに阿鼻叫喚の地獄絵図ってやつだ。
0380nobodyさん2006/12/21(木) 19:11:28ID:???
末尾を!(jpg|png|gif) と (jpg|png|gif) にしてみましたが、
画像でない方のリンクがなされません

ええと、自分のところのアップローダです
既に過去の掲示板投稿がたまっているので、アップローダ
において、リンクしてもらうようにするためです
これなら1発言中に何個画像があっても自由ですし、
組み込みより楽ですので
0381nobodyさん2006/12/21(木) 19:25:43ID:???
例。
・regex1はかくかくしかじかです。
 \.(jpg|png|gif)$なURL。小さく表示させたいらしい。
・regex2を条件式として、これこれこういうif文を経由して自動リンクになるようにしています。
 regex1でないURL。<a href="$&">$&</a>、<a href="$1$2">$1$2</a>などにしたいんだと思う。

regex[12]をどう書いてるのかの記載があると、「画像でない方のリンクがなされません」ではわからんよ、
という印象を受ける人もぐんと減るんだと思う。
0382nobodyさん2006/12/21(木) 19:32:25ID:???
>>381
正直余計わからんわw

リンクがされるかどうかは、正規表現にマッチするかどうかの判断でしょ?
まずURLは抜き出せるの?
0383nobodyさん2006/12/21(木) 20:15:23ID:???
>>365
> 少なくとも、ロボ物は適当で簡素なHTMLの方が拾ってくれたりするよ

「の方が」 はありえない。
0384nobodyさん2006/12/21(木) 22:10:23ID:v7yMEHCt
お世話になっております。
今perlを用いてCGIで
画像をUPできるようなものを作ろうとしています。
画像をうpする方は
<form method="POST" ENCTYPE="multipart/form-data" action="edit_completion.cgi">
<input type="file" name="TENSOU">
:
とやっていて受け取る方は
my $cgi = new CGI;
my $image = $cgi->param('TENSOU');
my $file_name="./test.jpg";
my $buffer;
open(OUT, ">$file_name") or die(qq(Can't open "$file_name".));
binmode OUT;
while (read($champ1_image, $buffer, 1024)) {
print OUT $buffer;
}
close OUT;
とやっています。
やってみると
白いページで止まってしまうのですが
お手数だと思いますが
正しいやり方を教えていただきますとありがたいです。

スレ違いでしたら誘導をお願いします。
0385nobodyさん2006/12/21(木) 22:42:34ID:???
die(qq(Can't open "$file_name".));
0386nobodyさん2006/12/21(木) 22:50:08ID:???
× while (read($champ1_image, $buffer, 1024)) {
○ while (read($image, $buffer, 1024)) {
0387nobodyさん2006/12/21(木) 23:01:44ID:???
>>384
use CGI::Carp qw(fatalsToBrowser);
と書いておくと、エラーがブラウザに表示されるようになるよ。参考までに。
0388nobodyさん2006/12/21(木) 23:20:52ID:???
>>381 >>382

$comment=~ s/(https?\:\/\/[^\s|\:|\<]+)\.(\/?)([\-_\.\!\~〜\*\'\(\)a-zA-Z0-9\;\/\?\:\@\&\=\+\$\,\%\#]*)(jpg|gif|png)/<a href=$1.$2$3$4$5><img src=$1.$2$3$4$5 hight=50 absbottom border=1><\/a>/ig;

これは末尾が画像の場合、画像でない場合はリンクだけにしたいんです

if使うと一旦配列に入れて展開しないとだめじゃないですか?
そんなことないですか?

それで、URL末尾(拡張子)が画像とそうでないものを置換演算で並べて
やろうと思ったんです
0389nobodyさん2006/12/22(金) 01:00:50ID:???
@list = ('test1', 'test2', 'test3',);
%hash = ('aaa' => @list);
$num = $hash{aaa};

これで、$numに3が入ってほしいんですが、test1が入ってしまいます。
%hash = ('aaa' => @list+0);
とすると3が入ります。
+0を付けなくても3を返してほしいんです。
助言をお願いします。
0390nobodyさん2006/12/22(金) 01:05:13ID:???
scalar(@
03913882006/12/22(金) 01:29:59ID:???
一旦、urlを自動リンクした後、
さらに自動リンクした<a href>のタグと(jpg|gif|png)含むものをマッチさせ
その部分だけimg srcで画像表示させることにしました
お騒がせしました
0392nobodyさん2006/12/22(金) 11:06:11ID:DIJoWwwO
助言お願いします。

grepで@namelistという配列に何個$nameがあるかどうか調べています。

$number=grep(/$name/, @namelist);

@namelistに様々な名前を入れてみたのですが、たまたま$name=キムタクと入れた
時だけ、@namelistにもキムタクがあるのにカウントしてくれません。(ネタじゃありません…)
まだ沢山カウントされない文字列があるのかもしれませんが、なぜ「キムタク」はカウントされなかったのでしょうか?
文字自体に問題があるのでしょうか?さっぱりです。。
0393nobodyさん2006/12/22(金) 11:09:46ID:DIJoWwwO
あれれ…。「キタムラ」も駄目でした。カタカナはNGかと思ったら、「クサナギ」は
大丈夫でした。どういうことだ…
0394nobodyさん2006/12/22(金) 11:23:58ID:???
>>392-393
たぶん文字っていうか文字コード
このスレの>>2-3に貼られてるサイトでも読んでこい
0395nobodyさん2006/12/22(金) 11:26:02ID:DIJoWwwO
>>394
「文字コード」ですか?
「キムタク」も「クサナギ」も文字コードは同じですよ。
ですから文字コードの問題ではないのではないでしょうか。
0396nobodyさん2006/12/22(金) 11:40:31ID:???
つ ダメ文字

でもキムタクってダメ文字じゃないような。
0397nobodyさん2006/12/22(金) 11:52:49ID:???
SJISが代表的だが正規表現の中に何の対策もしないで埋め込むと問題がでる
文字を含んだ文字コードというのがあるのよ。

いいから>>2-3をきちんと読め。そういう反応するってことは読んでないだろ。
特にPerlメモ

ttp://www.din.or.jp/~ohzaki/perl.htm

の「日本語を扱う」のあたり。
0398nobodyさん2006/12/22(金) 12:19:49ID:???
キムタクは「ちょ待てよ!」でマッチするんじゃ?
0399nobodyさん2006/12/22(金) 12:21:45ID:???
正規表現にもダメ文字みたいなのあるのか。
覚えておこうっと。
0400nobodyさん2006/12/22(金) 12:30:46ID:???
まずEUCに変換しないとな
0401nobodyさん2006/12/22(金) 13:49:50ID:???
\Q \E とか。
0402nobodyさん2006/12/22(金) 14:15:14ID:???
それもshift-jisだと何かがダメだったような。
0403nobodyさん2006/12/22(金) 14:28:59ID:???
素直にgrep(index($_,'name')>=0, @array)でいいじゃん
0404nobodyさん2006/12/22(金) 14:48:59ID:6wQis76n
便乗で文字コード変換について質問させてください
「�U」という文字をS-JISからEUCに変換しようと思っています。

Encode::from_to( $tmp, "CP932", "EUC-JP"); #Encode.pm
$tmp = jcode($tmp)->euc; #Jcode.pm
jcode::convert(\$tmp, 'euc'); #jcode.pl

正しく変換できるのはjcode.plのみでした。
Encode.pmあるいはJcode.pmで変換する方法はありますか?
0405nobodyさん2006/12/22(金) 17:44:39ID:???
Encode::EUCJPMSでeucJP-msやCP51932が使えるようになるみたいです。
http://search.cpan.org/~naruse/Encode-EUCJPMS-0.07/EUCJPMS.pm

> 正しく変換できるのはjcode.plのみでした。
$tmp = '�A'; # 0xFA41(CP932)
jcode::convert(\$tmp, 'euc', 'sjis'); # 0x13A2 ?

NEC特殊文字をやっつけてくれたjcode.plもIBM拡張文字を食わされると困る模様。
0406nobodyさん2006/12/22(金) 18:10:36ID:6wQis76n
>>405
ありがとうございます

��や�ケもダメですね
Perlで全ての日本語の文字コード変換を行うことはできないのでしょうか?
入力される可能性のある文字についてみなさんどのように処理されていますか?
0407nobodyさん2006/12/22(金) 18:27:46ID:???
日本語コードといっても機種依存文字の部分がバリエーション
けっこうあるし、unicode以前は統一されていた部分ですら
どうunicodeに対応させるかでさらに分裂してしまってる現状
なので個人的にはあきらめているな。

どうしても満足できなければ、自前で好きな変換表を定義してe
nc2xsでperlから使えるようにするのがいいんじゃないか。

いいのができたら公開すると世の中のためにもなる。
0408nobodyさん2006/12/22(金) 19:29:11ID:???
Cモジュールの作り方がさっぱり分からん
0409nobodyさん2006/12/22(金) 22:04:52ID:???
perlxstut, perlxs 辺り読めば分かると思うけど。
0410nobodyさん2006/12/23(土) 01:35:39ID:rkaYYOb9
掲示板への投稿が一定数以上なければ、閲覧することが
できない制限をつけたいのですが、わかりません。
(来訪者の割りに投稿者が少なく、DOMを減らしたいため)
書込みルーチン内に、coookieを使って投稿カウントを保存
し、閲覧時にcoookieを読んで条件分岐すれば良さそうな気が
していますが、具体的にどうしたらよいのかわかりません。

「imgboard」で実現したいのですが。
http://www.big.or.jp/~talk/t-club/soft/mini_r6/index.cgi

いますが、
0411nobodyさん2006/12/23(土) 01:42:38ID:rkaYYOb9
すみません。「いますが、」はゴミです。
coookie⇒cookieでした。失礼しました。
0412nobodyさん2006/12/23(土) 02:33:17ID:???
> 具体的にどうすればよいのかわかりません。

わかってるじゃん。あとは、クッキーを読み書きする方法を調べるだけだろう。
「Perl クッキー」とかで検索すれば、すぐにわかるよね。
■ このスレッドは過去ログ倉庫に格納されています